2011-04-24 70 views
2

CoffeeScript列表解析与Pythons稍有不同...这些是人们喜欢返回列表解析的方式吗?CoffeeScript列表理解/数组理解

return elem+1 for elem in [1,2,3] # returns 3+1 
return [elem+1 for elem in [1,2,3]].pop() # returns [2,3,4] 
return (elem+1 for elem in [1,2,3]) # returns [2,3,4] 

在Python,我只想写:

return [elem+1 for elem in [1,2,3]] 

并正确返回列表,而不是列出清单,因为这会在CoffeeScript的事情。

回答

9

以下哪种方式是人们喜欢返回列表解析的方式?

return elem+1 for elem in [1,2,3] # returns 3+1 
return [elem+1 for elem in [1,2,3]].pop() # returns [2,3,4] 
return (elem+1 for elem in [1,2,3]) # returns [2,3,4] 

好了,三个选项,肯定#3。但是,最好的风格上的选择实际上是这样的:

elem+1 for elem in [1,2,3] # returns [2,3,4] 

作为函数的最后一行,任何表达expr相当于return (expr)return关键字非常少有必要。

+0

请注意,您不能使用此分配,即[someVar = elem + 1 for elem in [1,2,3]'得到的值为4.恼人的是,虽然可以理解,但您仍然必须将列表理解放在括号中:'someVar =(elem + 1 for [1,2,3])'' – AJP 2013-05-11 22:21:19

2

我从来没有使用CoffeeScript,但如果我的选项得到错误的结果,做一个愚蠢的[...].pop() kludge或只使用一组圆括号,我会去括号。

+0

我已经使用了CoffeeScript,这确实是基本正确的。 :)但看到我的答案进一步阐述。 – 2011-04-24 21:42:46