私はクラスを持っていますTest:
class Test
attr_accessor :data
def initialize
@data = [0, 1, 2, 3]
end
def map
@data.map!{|i| i = yield i }
end
end
そして私はそれを次のように使おうとします:
a = Test.new
a.map{|i|
if(i==2)
i+=1
break i #<--- -This line is the focus
else
1
end
}
puts a.data
私が期待する出力はです[1, 1, 3, 3]。代わりに、私は取得し[1, 1, 2, 3]ます。のブロックの最後の反復はmap、変更されたを返しませんi。
に置き換えbreak iましたnext i。これは私が期待したとおりに実行され、出力を生成しました[1, 1, 3, 1]。
このコード(または、理想的には2番目のコードスニペットで指摘した行)を変更して、出力を取得するにはどうすればよい[1, 1, 3, 3]ですか?言い換えると、どうすればブロックを終了させることができますが、最後の1つの値をに戻すことができmapますか?これを行うためのきちんとした読みやすい方法はありますか(たとえば、ブールフラグを切り替える以外にbreak_now)?