是否存在基于真值的“if”或“除非”的惯用Ruby方式?

时间:2011-08-15 01:00:59

标签: ruby idioms

如果x if y为真,我想运行z,如果z为假,我想x unless y

最常用的方法是什么?我能想到的最好的是:

x if z ? y : !y

3 个答案:

答案 0 :(得分:6)

试试这个:

x if !!y == !!z

这是用于强制转换为布尔值的标准Ruby习惯用法。如果yz已经是布尔值,那么您只需执行以下操作:

x if y == z

答案 1 :(得分:4)

使用xor运算符,然后否定它:

x unless (!y ^ !z)

根据Victor的建议进行了更正,因为不是truefalsenil的事情可能与^有关。

答案 2 :(得分:1)

这似乎是一种令人困惑的思考方式。对我来说,更清晰的表述(Ruby-ish或其他)是

x if (z and y) or (not z and not y)