Я запускаю Rails 2.3.2.
Как преобразовать "Cool" в "Cool"? Я знаю, что "Cool".downcase работает, но есть ли метод Ruby/Rails, который делает противоположное от capitalize, т.е. uncapitalize или decapitalize?
Я запускаю Rails 2.3.2.
Как преобразовать "Cool" в "Cool"? Я знаю, что "Cool".downcase работает, но есть ли метод Ruby/Rails, который делает противоположное от capitalize, т.е. uncapitalize или decapitalize?
Нет инверсии capitalize, но вы можете свободно откатываться:
class String
def uncapitalize
self[0, 1].downcase + self[1..-1]
end
end
Существует также:
"coolat_cat".camelize(:lower) # => "coolCat"
Вы также можете сделать это с помощью простого sub:
"Cool".sub(/^[A-Z]/) {|f| f.downcase }
str = "Directly to the south"
str[0] = str[0].downcase
puts str
#=> "directly to the south"
Не существует реального инверсированного значения, но я думаю, что underscore близок.
"CoolCat".underscore #=> "cool_cat"
"cool_cat".capitalize #=> "Cool_cat"
"cool_cat".camelize #=> "CoolCat"
Изменить: underscore, конечно, является инверсией camelize, а не capitalize.
Вы можете использовать tap (чтобы он соответствовал одной строке):
"JonSkeet".tap { |e| e[0] = e[0].downcase } # => "jonSkeet"
Если вы используете Ruby Facets, вы можете ввести первую букву в нижнем регистре:
https://github.com/rubyworks/facets/blob/master/lib/core/facets/string/uppercase.rb
Существует инверсия capitalize, называемая swapcase:
"Cool Cat".swapcase #=> "cOOL cAT"
Попробуйте это
'Cool'.sub(/^([A-Z])/) { $1.tr!('[A-Z]', '[a-z]') }
https://apidock.com/ruby/XSD/CodeGen/GenSupport/uncapitalize
name = "Viru"
name = name.slice(0).downcase + name[1..(name.length)]