案例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 ?
答案 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}}。