2017-07-04 8 views
0

私は各単語を大文字にするために文字列を分割しようとしています。Rubyの分割が文字列で機能しないのですか?

コード:

def titleize(a) 
little_words = %w(a an the) 
#a = %w(a quick brown fox jumps) --> works if an array is specifically used. 
a.split(" ") 
a.each do |i| 
    if !little_words.include? "#{i}" 
    i.capitalize! 
    end 
end 
g = a.join(" ") 
return g 
end 

print titleize("a quick brown fox jump") 

エラー:

`titleize': undefined method `each' for "a quick brown fox jump":String (NoMethodError) 

は、しかし、私はこのエラーに実行しています。私が理解しているところからは、変数 'a'はメソッド 'each'を含まない文字列であるというエラーが出ています。私はすでに 'split( "")'を使って文字列を配列に変換しています。なぜそれは機能しませんか?

+0

を書くことができますので、どのような方法が

a = a.split(" ") 

そして" "を返すことは、分割のデフォルトで無視しているのでどこでも。 "a"はまだ "each"メソッドを持たない文字列です。 – Secespitus

答えて

2

あなたはあなたが分割を使用しますが、あなたは結果の配列を格納しない単に

a = a.split 
+0

ありがとうございます。私は、ルビには、返り値を扱うことなく整数を文字列に変換する "i.to_s"のような特定のメソッドがあることを理解しています。分割に相当するものはありますか? – Carrein

+0

'to_s'は文字列を返しますが、呼び出されたオブジェクトは変更しません。それは同じだ。インプレースでオブジェクトを修正するメソッドもありますが、同じ型の "型"を返します。この場合splitは文字列で呼び出され、配列を返します。不可能です – Ursus

+1

@axiac '!'受信者を変更する '!'のないメソッドオブジェクトがそのアイデンティティーを変えることができないという事実は、もっと重要だと思います。文字列はそれ自体の文字を変更することはできますが、配列や整数に変換することはできません。文字列は常に文字列になります。 – Stefan

関連する問題