[英]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.