2012-07-28 19 views
6

在CoffeeScript文檔array splicing中,尾隨, _ref的用途是什麼?用coffeescript拼接數組,什麼是_ref for?

的CoffeeScript:

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
numbers[3..6] = [-3, -4, -5, -6] 

編譯爲:

var numbers, _ref; 
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; 
[].splice.apply(numbers, [3, 4].concat(_ref = [-3, -4, -5, -6])), _ref; 

回答

7

這是因爲CoffeeScript中的分操作,想回到它剛剛分配切片,但splice()返回被刪除的元素來代替。

因此,爲了實現這一目標,編譯構造成第一片分配給本地_ref變量的代碼片段,然後使用comma operator調用splice()後返回該變量。

+0

+1鏈接到逗號運算符,道格拉斯克羅克福德建議不要使用它,因爲它可能導致'過於棘手的表達式',所以我想我只是忘了它。這可能是不可能回答的,但是你是否知道coffeeScript想要返回它剛分配的片的原因,在本例中記住它不被任何東西使用......?謝謝。 – AJP 2012-07-28 19:49:29

+2

@AJP,可能是因爲無論調用者是否對返回值感興趣,它都可以生成相同的代碼片段。換句話說,在後一種情況下優化'_ref'可能不值得爲編譯器帶來額外的複雜性。 – 2012-07-28 20:01:27