这个Ruby 2.0代码有什么问题?
p (1..8).collect{|denom|
(1...denom).collect{|num|
r = Rational(num, denom)
if r > Rational(1, 3) and r < Rational(1, 2)
return 1
else
return 0
end
}
}.flatten
错误在block (2 levels) in <main>': unexpected return (LocalJumpError)
。我想创建一个包含 n (和其余零)的平面列表,其中 n 是分数低于8且在1/3和1之间的有理数的数量/ 2。 (it's a Project Euler problem)。所以我试图从内部区块返回。
答案 0 :(得分:41)
Ruby * 中的块内不能return
。最后一个语句成为返回值,因此您可以在您的情况下删除return语句:
p (1..8).collect{|denom|
(1...denom).collect{|num|
r = Rational(num, denom)
if r > Rational(1, 3) and r < Rational(1, 2)
1
else
0
end
}
}.flatten
* :您可以在lambda
块内lambda { return "foo" }.call # => "foo"
。它与范围和所有这些有关,这是lambda
块和proc
块之间的主要区别之一。传递给方法的“普通”块更像是proc
块。