有没有办法强制对 && 和 || 进行非惰性评估?在 Ruby?

Is there a way to force non-lazy evaluation of && and || in Ruby?

今天晚上我在玩 FizzBu​​zz 编程练习,尝试用不同的方式编写解决方案。

我写的一行是:

nf = !((ff = i % 3 == 0) || (bf = i % 5 == 0))

nf 是“无标志”

ff 是“Fizz 标志”

bf 是“Buzz 标志”

现在我知道这是一种可怕的风格 - 我对原始问题有更好的解决方案 - 但这个也不起作用,因为 Ruby 对 || 的懒惰评估表达式意味着如果 i 是 3 的倍数,ff 被设置为 true 并且 bf 被保留为 nil(尽管它被定义是因为它发生在求值之前)。

我一直在寻找但没有成功的方法是让 Ruby 评估 || 的两边(或另一个运算符)以便所有三个标志都获得正确的值。

Ruby有没有办法做到这一点?

也许您正在寻找 |& 运算符 短路。

例如:

irb(main):007:0> true | (puts "hello")
hello
=> true
irb(main):008:0>

TrueClass 的文档hereFalseClass.

存在相同的方法