Я хотел бы запустить x if y, если z верно, и x unless y, если z ложно.
x if y
z
x unless y
Какой самый идиоматичный способ сделать это? Лучшее, что я могу придумать, это:
x if z ? y : !y
Попробуйте это:
x if !!y == !!z
Это стандартная идиома Ruby для приведения к булевым значениям. Если y и z уже являются логическими значениями, вы можете просто сделать:
y
x if y == z
Используйте оператор xor, а затем отрицайте его:
x unless (!y ^ !z)
Исправлено на основе предположения Виктора, поскольку вещи, которые не true, false или nil, могут делать свое дело с ^.
true
false
nil
^
Это кажется странным способом думать об этом.Для меня более ясная формулировка (Ruby-ish или иным образом)
x if (z and y) or (not z and not y)