私はクラスを持っています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
)?