当我颠倒 words.first.capitalize 和 words.join(" ") 行的顺序时,为什么我得到 nil ?
这是原因:
"abb".capitalize # => "Abb"
"Abb".capitalize! # => nil
"Abb".capitalize # => "Abb"
String.capitalize!
说:
通过将第一个字符转换为大写并将其余字符转换为小写来修改 str。如果未进行任何更改,则返回 nil。注意:大小写转换仅在 ASCII 区域有效。
当您将行words.first.capitalize!
放在方法的末尾时,String.capitalize!
尝试将已经大写的单词大写。您正在使用该bang(!)
版本,因此,根据文档,您将获得nil
.
一个例子:
def titleize(x)
words = x.split(" ").collect do |word|
if %w(the and of).include?(word)
word
else
word.capitalize
end
end
words.join(" ")
words.first.capitalize!
end
titleize("he great book") # => nil
测试时,您的输入字符串可能不包含您在此处列出的任何单词%w(the and of)
。我建议你String#capitalize
改用。