我有一堂课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]。
如何修改这段代码(或者,理想情况下,我在第二个代码片段中指出的行)以便获得输出[1, 1, 3, 3]?换句话说,我怎样才能使块完成,但将最后一个值传回map?是否有一种简洁易读的方式来做到这一点(例如,切换布尔标志break_now)?