Неожиданное преобразование Coffeescript с помощью if?

Этот CoffeeScript:

x = y > z ? 'a' : 'b'

Компилируется в:

x = (_ref = y > z) != null ? _ref : {
  'a': 'b'
};

Я предполагаю, что это ожидаемо, просто не интуитивно понятно.

Это лучший способ сделать это в coffeescript?


person bryce    schedule 29.09.2013    source источник


Ответы (3)


Оператор CoffeeScript ? является оператором существования (также используются имена soak или elvis). Пример: context = window ? global.

Способ CoffeeScript сделать это - x = if x > z then 'a' else 'b' (или x = x > z and 'a' or 'b', но операнд "и" должен быть правдивым, чтобы это работало), который будет компилироваться в тернарный оператор, который вы ожидаете.

person Ven    schedule 29.09.2013

Вы можете использовать if вместо ?::

x = if y > z then 'a' else 'b'

это компилируется в

var x;

x = y > z ? 'a' : 'b';
person Joachim Sauer    schedule 29.09.2013

Я думаю, это то, что я хочу, но я не знаю, доволен ли я этим.

Кофейный скрипт:

x = if y > z then 'a' else 'b'

Javascript

x = y > z ? 'a' : 'b';
person bryce    schedule 29.09.2013