Существует ли какой-то идиоматический способ Ruby сделать «если» или «если» на основе значения истинности? - PullRequest
2 голосов
/ 15 августа 2011

Я хотел бы запустить x if y, если z верно, и x unless y, если z ложно.

Какой самый идиоматичный способ сделать это? Лучшее, что я могу придумать, это:

x if z ? y : !y

Ответы [ 3 ]

6 голосов
/ 15 августа 2011

Попробуйте это:

x if !!y == !!z

Это стандартная идиома Ruby для приведения к булевым значениям. Если y и z уже являются логическими значениями, вы можете просто сделать:

x if y == z
4 голосов
/ 15 августа 2011

Используйте оператор xor, а затем отрицайте его:

x unless (!y ^ !z)

Исправлено на основе предположения Виктора, поскольку вещи, которые не true, false или nil, могут делать свое дело с ^.

1 голос
/ 15 августа 2011

Это кажется странным способом думать об этом.Для меня более ясная формулировка (Ruby-ish или иным образом)

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