そこで、「the」、「and」、「if」などのあいまいな単語を除いて、文字列内のすべての単語の最初の文字を大文字にするメソッド「#titleize」を定義しようとしています。
これまでの私のコード:
def titleize(string)
words = []
stopwords = %w{the a by on for of are with just but and to the my had some in}
string.scan(/\w+/) do |word|
if !stopwords.include?(word)
words << word.capitalize
else
words << word
end
words.join(' ')
end
問題は if/else セクションにあります。文字列に対してメソッドを実行すると、「構文エラー、予期しない $end、keyword_end が必要です」というメッセージが表示されます。
通常 {中かっこ} 内のコード ブロックに入る、if/else の簡略版を使用した場合、コードは機能すると思います。この略記の構文は、次のようなものです。
string.scan(/\w+/) { |word| !stopwords.include?(word) words << word.capitalize : words
<< word }
...と
words << word.capitalize
!stopwords.include?(word) が true を返す場合に発生し、
words << word
!stopwords.include?(単語) が false を返す場合に発生します。しかし、これもうまくいきません!
次のように見える場合もあります (これは少し異なる/より効率的なアプローチです - 個別の配列がインスタンス化されていません):
string.scan(/\w+/) do |word|
!stopwords.include?(word) word.capitalize : word
end.join(' ')
(メソッド内でのメソッドの呼び出しから Ruby の Titleize まで) ...しかし、このコードを実行しても「構文エラー」メッセージが表示されます。
そう!私が言及している構文を知っている人はいますか?覚えるのを手伝ってくれませんか?または、このコードが機能しない別の理由を指摘できますか?