![](/img/trans.png)
[英]How to correctly use coffeescript / sass ( compiled languages ) with Google Polymer?
[英]Why || = not compiled such that if we use [] or not, in coffeescript?
为什么会有这种差异:
class Foo
getTest: ->
@test ||= 42
编译为:
return this.test || (this.test = 42);
不同的
class Foo
getTest: ->
@test['bar'] ||= 42
编译在:
var _base;
return (_base = this.test)['bar'] || (_base['bar'] = 42);
这个变量“ _base”的作用是什么?
return this.test['bar'] || (this.test['bar'] = 42);
也是个好方法,不是吗?
谢谢。
||=
需要考虑两大类结构:
simple_expr ||= x
complex_expr ||= x
一个简单的表达式就像@test
一样@test
可能)没有副作用,并且(可能)对它进行两次评估不会降低性能。
复杂表达式可以是其他任何东西: @test['x']
, @test(11).pancakes
,...复杂表达式可能会产生副作用,也可能会很昂贵,因此您只需要对它们进行一次评估。
现在考虑对expr1
进行多少次评估:
expr1 || (expr1 = expr2)
有时expr1
将被计算两次,CoffeeScript的是积攒尽可能多的expr1
,因为它可以在_base
避免费用和评估可能的副作用expr1
的两倍。
您可能还会注意到,对于简单的表达式,唯一可以存储在_base
是整个表达式本身。 我怀疑他们实际上是默认情况下考虑所有复杂的表达式,然后在事实证明没有东西要_base
了_base
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.