有没有办法强制对 && 和 || 进行非惰性评估?在 Ruby?
Is there a way to force non-lazy evaluation of && and || in Ruby?
今天晚上我在玩 FizzBuzz 编程练习,尝试用不同的方式编写解决方案。
我写的一行是:
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 的文档here。 FalseClass
.
存在相同的方法
今天晚上我在玩 FizzBuzz 编程练习,尝试用不同的方式编写解决方案。
我写的一行是:
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 的文档here。 FalseClass
.