【发布时间】:2011-08-15 01:00:59
【问题描述】:
如果z 为真,我想运行x if y,如果z 为假,我想运行x unless y。
最惯用的方法是什么?我能想到的最好的是:
x if z ? y : !y
【问题讨论】:
-
我认为您提出的内容比其他建议的替代方案足够好并且更具可读性。我会稍微修改一下以使其更具可读性:
x if (z ? y : !y).
如果z 为真,我想运行x if y,如果z 为假,我想运行x unless y。
最惯用的方法是什么?我能想到的最好的是:
x if z ? y : !y
【问题讨论】:
x if (z ? y : !y).
试试这个:
x if !!y == !!z
这是强制转换为布尔值的标准 Ruby 习惯用法。如果y 和z 已经是布尔值,那么你可以简单地这样做:
x if y == z
【讨论】:
使用异或运算符,然后取反:
x unless (!y ^ !z)
根据 Victor 的建议进行了更正,因为不是 true、false 或 nil 的东西可以用 ^ 做自己的事情。
【讨论】:
true 和 false 以外的东西而闻名)我会将其重写为 x unless(!y ^ !z)
^ 运算符仅存在于 TrueClass、FalseClass 和 NilClass 中。如果y 不是真、假或零,这将无法预料地失败。因此,如果您这样做,您需要确保您使用的是布尔值。
这似乎是一种令人困惑的思考方式。对我来说,更清晰的表述(Ruby-ish 或其他)是
x if (z and y) or (not z and not y)
【讨论】: