簡體   English   中英

為什么|| =未編譯,如果我們不使用[],則在coffeescript中編譯?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM