Coffeescript执行列表理解对象
为什么coffeescript不返回对象键,而是将x的值视为字符串“x”Coffeescript执行列表理解对象,coffeescript,Coffeescript,为什么coffeescript不返回对象键,而是将x的值视为字符串“x” coffee> a = { test: '0', super: '1' } coffee> x for x,y of a [ 'test', 'super' ] coffee> {x:y} for x,y of a [ { x: '0' }, { x: '1' } ] 因为这就是工作原理。假设它按照您希望的方式工作。如果我在某个地方这样说会发生什么: window.test = 'pancakes'
coffee> a = { test: '0', super: '1' }
coffee> x for x,y of a
[ 'test', 'super' ]
coffee> {x:y} for x,y of a
[ { x: '0' }, { x: '1' } ]
因为这就是工作原理。假设它按照您希望的方式工作。如果我在某个地方这样说会发生什么:
window.test = 'pancakes'
这只不过是一个测试
变量进入每个人的范围,突然间你的a
将是:
a = { 'pancakes': '0', super: '1' }
你会想知道你的电脑在搞什么鬼把戏。因此,如果属性名作为变量计算,而不是引用较少的字符串,那么我们最终都会写出一些难看的东西,比如:
a = { 'test': '0', 'super': '1' }
只是为了得到可预测和一致的结果
我认为获得所需的最简单方法是添加一个小功能:
objectify = (k, v) ->
o = { }
o[k] = v
o
然后你可以:
a = (objectify(x, y) for x, y of o)
演示:因为这就是工作原理。假设它按照您希望的方式工作。如果我在某个地方这样说会发生什么:
window.test = 'pancakes'
这只不过是一个测试
变量进入每个人的范围,突然间你的a
将是:
a = { 'pancakes': '0', super: '1' }
你会想知道你的电脑在搞什么鬼把戏。因此,如果属性名作为变量计算,而不是引用较少的字符串,那么我们最终都会写出一些难看的东西,比如:
a = { 'test': '0', 'super': '1' }
只是为了得到可预测和一致的结果
我认为获得所需的最简单方法是添加一个小功能:
objectify = (k, v) ->
o = { }
o[k] = v
o
然后你可以:
a = (objectify(x, y) for x, y of o)
演示:对于编程语言来说,可预测且一致的结果非常好。a={'test':'0','super':'1}在我看来很好,因为它避免了歧义。否则,coffeescript就不得不做出一个固执己见的猜测,在这种情况下,它猜错了。感谢您的详细回答和解决方案功能!有用的!当涉及到编程语言时,可预测和一致的结果是相当好的。a={'test':'0','super':'1}在我看来很好,因为它避免了歧义。否则,coffeescript就不得不做出一个固执己见的猜测,在这种情况下,它猜错了。感谢您的详细回答和解决方案功能!有用的!