У меня вопрос по поводу coffeescript для цикла.
Одиночный случай достигается:
-> foo for foo in foos when foo is bar
и производит:
(function() {
var foo, _i, _len, _results;
_results = [];
for (_i = 0, _len = foos.length; _i < _len; _i++) {
foo = foos[_i];
if (foo === bar) _results.push(foo);
}
return _results;
});
что идеально.
Однако у меня есть случай, когда задействовано несколько условий, и конструкция, приведенная выше, не поддерживает их, насколько мне известно. Вот этот:
->
for foo in foos
if foo is bar
foo
else if foo isnt bar
bar
делает и компилирует в:
(function() {
var foo, _i, _len, _results;
_results = [];
for (_i = 0, _len = foos.length; _i < _len; _i++) {
foo = foos[_i];
if (foo === bar) {
_results.push(foo);
} else if (foo !== bar) {
_results.push(bar);
} else {
_results.push(void 0);
}
}
return _results;
});
это нормально, но мне было интересно, есть ли способ избавиться от лишних else
утверждений. Прямо сейчас я добавил:
else
return undefined
, который предотвращает нажатие на _results
и работает.
Итак, есть ли в coffeescript конструкция, похожая на первый пример, но для нескольких условий?