【发布时间】:2012-11-26 21:36:42
【问题描述】:
我有一堂课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]。
如何修改这段代码(或者,最好是我在第二个代码-sn-p 中指出的行),以便获得输出 [1, 1, 3, 3]?换句话说,我怎样才能使块完成,但将最后一个值传递回map?有没有一种简洁易读的方式来做到这一点(例如,切换布尔标志break_now)?
【问题讨论】: