coffeescript是否提供等效的"否则"在数组理解中,如python的列表推导?
foo = ["yes" if i < 50 else "no" for i in range(100)]
因为,在python中,if / else实际上是一个三元语句,我认为coffeescript可能类似,所以我尝试了这个:
foo = (if i < 50 then "yes" else "no" for i in [0..100])
不同的是,python恰当地给了我50个是和50个没有,但是coffeescript只给了我一个&#34;是&#34;。
所以,为了清楚起见,我想知道是否有办法使用&#34; else&#34;在coffeescript的阵列理解中。
答案 0 :(得分:4)
您的原始查询转换为:
var _i, _results;
if (i < 50) {
return "yes";
} else {
_results = [];
for (i = _i = 0; _i <= 100; i = ++_i) {
_results.push("no");
}
return _results;
}
正如您所看到的,i < 50
立即得到满足,因为它未定义,返回单个“是”。
您需要以这种方式重写它以获得所需的结果:
foo = ((if i < 50 then "yes" else "no") for i in [0..100])
这导致以下结果:
for (i = _i = 0; _i <= 100; i = ++_i) {
_results.push(i < 50 ? "yes" : "no");
}
答案 1 :(得分:1)
新的线条和缩进也有效。在Coffeescript中,将循环变成理解是非常容易的。
x = for i in [0..100]
if i<50 then 'yes' else 'no'