这个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
Run Code Online (Sandbox Code Playgroud)
错误在于block (2 levels) in <main>': unexpected return (LocalJumpError).我想创建一个包含n个(和其余的零)的平面列表,其中n是有理数的数,其中分母低于8,介于1/3和1/2之间.(这是项目欧拉问题).所以我试图从内部块返回.
sar*_*dne 46
你不能return在Ruby *中的一个块里面.最后一个语句成为返回值,因此您可以在您的情况下删除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
Run Code Online (Sandbox Code Playgroud)
*:你可以在内部lambda块:lambda { return "foo" }.call # => "foo".它与范围和所有这些有关,这是lambda块和proc块之间的主要区别之一.传递给方法的"普通"块更像是proc块.