マークした行の周りで問題を引き起こしている次のコードがあります。
arr = 'I wish I may I wish I might'.split
dictionary = Hash.new
arr.each_with_index do |word, index|
break if arr[index + 2] == nil
key = word << " " << arr[index + 1] #This is the problem line
value = arr[index + 2]
dictionary.merge!( { key => value } ) { |key, v1, v2| [v1] << v2 }
end
puts dictionary
このコードを実行すると、次の出力が期待されます。
{"I wish"=>["I", "I"], "wish I"=>["may", "might"], "I may"=>"I", "may I"=>"wish"}
ただし、代わりに得られるのは
{"I wish"=>["I may", "I"], "wish I"=>["may I", "might"], "I may"=>"I wish", "may I"=>"wish I"}
問題の行を次のように置き換えると、
key = word + " " + arr[index + 1]
すべてが期待どおりに機能します。予期しない動作を引き起こした私の回線の最初のバージョンについてはどうですか?