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
。