我有一堂课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
)?