gpt4 book ai didi

ruby - 意外返回(LocalJumpError)

转载 作者:数据小太阳 更新时间:2023-10-29 06:23:07 26 4
gpt4 key购买 nike

这段 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)。所以我试图从内部 block 返回。

最佳答案

在 Ruby* 中,您不能在 block 内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 block 内:lambda { return "foo"}.call # => "foo"。它与范围界定等有关,这是 lambda block 和 proc block 之间的主要区别之一。您传递给方法的“普通” block 更像是 proc block 。

关于ruby - 意外返回(LocalJumpError),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17800629/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com