所以我有一个递归调用,看起来像这样:
def foo list, &block
list.each do |a|
newlist = a.bar
yield a
foo newlist, &block
end
end
我试图传递到代码块中,如果a == 0,则不会重复。
foo list do |a|
next if a == 0
end
但是,这似乎不起作用。所以我尝试传入一个额外的布尔值到块中,但它显然是布尔值的副本,而不是别名(我以为ruby中的原始类型也有别名,因为所有东西都是对象)。
所以这个也不行:
def foo list, &block
list.each do |a|
newlist = a.bar
continue = true
yield a, continue
foo newlist, &block if continue
end
end
foo list do |a, c|
c = false if a == 0
end
有没有什么方法可以完成我在这里尝试的事情?
2条答案
按热度按时间zxlwwiss1#
我相信你可以在块内使用
break
而不是next
。调用中断应该终止调用的块和方法块(在你的例子中是foo)。不知道这是不是你要找的0yycz8jy2#
这可以通过创建一个Bool_Wrapper类来解决,该类只包含一个布尔值,并具有用于该布尔值的attr_accessor。但希望有人知道更好的方法来解决这个问题!