What is the problem with this Ruby 2.0 code?
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
The error is in block (2 levels) in <main>': unexpected return (LocalJumpError)
. I want to create a flat list containing n ones (and the rest zeroes) where n is the number of rational numbers with denominators below 8 which are between 1/3 and 1/2. (it's a Project Euler problem). So I'm trying to return from the inner block.
You can't
return
inside a block in Ruby*. The last statement becomes the return value, so you can just remove the return statements in your case:*: You can inside
lambda
blocks:lambda { return "foo" }.call # => "foo"
. It has to do with scoping and all that, and this is one of the main differences betweenlambda
blocks andproc
blocks. "Normal" blocks you pass to methods are more likeproc
blocks.