我有一系列lambda&s;我想同时运行所有lamba' s数组可以有任意数量的lamba' s这使得它很难。因为你只能枚举一个数组。
def detect_int(*args)
return 1 if args.empty?
n = 1
args.each do |lam|
until lam.call(n) do
n += 1
end
retry if lam.call(n) == false
end
n
end
这个方法应该在理论上有效,它应该增加计数,直到lam1.call(n)返回true。然后它将移动到下一个lam,如果lam2.call(n)返回false,它应该再次使用从lam1开始的递增n重试args.each循环。等等。
只有我得到一个SyntaxError: (irb):76: Invalid retry
你将如何重试每个循环以便它从头开始
我正在阅读ruby loops and the retry method here.我的语法似乎正确适合语法,但因为它在循环中的循环可能会让人感到困惑。目前它坐在args循环中,这是我想要重置的循环。
答案 0 :(得分:3)
由于retry
是一个ruby关键字,解析器希望看到本机循环或开始 - 救援结束条件。没有人,解析器卡住(Array#each
不是ruby循环,它是数组实例上的普通ruby 方法的调用。)可能的解决方案将是:
args.each do |lam|
begin # grant parser with a scope
until lam.call(n) do
n += 1
end
raise if lam.call(n) == false
rescue
retry
end
end
答案 1 :(得分:0)
这是另一种方法。一旦args的每个实例都为真,它只会打破循环。这很危险,因为它永远无法满足循环并无限期地继续
n = 1
while true do
args.all? { |lam| lam.call(n) } and return n
n += 1
end