この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)
にあります。 n1(および残りのゼロ)を含むフラットリストを作成したい(nは、1/3〜1/2の分母が8未満の有理数の数です。 ( これはプロジェクトオイラーの問題です )。だから、私は内側のブロックから戻ろうとしています。
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
ブロックの主な違いの1つです。メソッドに渡す「通常の」ブロックは、proc
ブロックに似ています。