coffeescript for in when vs下划线过滤器

时间:2014-08-06 06:12:25

标签: coffeescript underscore.js filtering list-comprehension

案例1:

我原以为这两行代码会产生相同的结果,但他们不会。

readies = _.filter sections, (section) -> section.ready()

VS

readies = section for section in sections when section.ready()

案例2:

这两行代码执行会产生相同的结果(唯一的区别是括号)

readies = _.filter sections, (section) -> section.ready()

readies = (section for section in sections when section.ready())

案例3:

作为与上述相反的对象,为什么,如上所述,以下行会产生相同的结果?

bobs = _.filter sections, (section) -> section.name is "bob"

bobs = section for section in sections when section.name is "bob"

案例1 中的方法的调用是否会阻止when子句按预期工作,如果是,为什么?

为什么案例2 中的括号需要工作,而不是案例3

1 个答案:

答案 0 :(得分:0)

括号在理解中很重要,这是有原因的。考虑函数调用而不是赋值:

foo (section for section in sections when section.ready())

VS

foo section for section in sections when section.ready()

在第一种情况下,您将所有准备好的部分放在一起,并将它们作为foo的参数 在第二种情况下,您可以分别在每个就绪部分调用foo

第三种情况也是如此:您需要使用括号来获取名为"bob"的所有部分的列表。但是如果你删除括号,将在每个"bob"部分执行赋值。如果没有"bob"变量(bob,如果没有变量,那么您将只获得单undefined,如果有很多则变为最后一个变量{{1}}。