このスクリプトは、ユーザがexit
と入力するまで入力を継続します。その時点でループが途切れます。しかし、なぜループはnil
を返し、オブジェクトはwith_object
に渡されませんか?`with_object`に渡されたオブジェクトを返すようにループを修正する方法はありますか?
puts "enter lines, type exit to finish"
loop.with_object([]) do |_,a|
i = gets.chomp
i == 'exit' ? break : a << i
end
#=> nil
official documentationEnumerator#with_object
によると、それに渡されたオブジェクトを返す必要があります。
代わりに 'i == 'exit'と書くことができますか? (StopIterationを上げる):a << i'。 [Kernel#loop](http://ruby-doc.org/core-2.3.0/Kernel.html#method-i-loop)は、ループを中断することによって例外を処理します。これは、通常の 'ループ。その理由から、私はあなたが持っているものよりもこれを好むが、それは軽微だ。読みやすくするために、これを2行に書くとよいでしょう。 'raise StopIteration if i == exit; a << iである。 –