2012-07-28 12 views
6

array splicingのCoffeeScriptドキュメントでは、末尾には, _refの目的は何ですか?coffeescriptによる配列スプライシング、どのような_refですか?

のCoffeeScript:

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

がにコンパイル:

のCoffeeScriptのスライス作業は、それがちょうど割り当てられたスライスを返すように望んでいるが、代わりに取り除かれた要素が splice()返すためです
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

だから、これを達成するためには、まずローカル_ref変数にスライスを割り当てて、コードの断片への構築物は、その後、splice()を呼び出した後、その変数を返すためにcomma operatorを使用してコンパイルします。

+0

+1コンマ演算子へのリンクについては、Douglas Crockfordは「あまりにもトリッキーな表現」につながる可能性があるので、それを使用することをお勧めします。これは答えるのが不可能かもしれませんが、coffeeScriptが割り当てたスライスを返そうとしている理由を知っていますか?この例では何も使われていません...?ありがとう。 – AJP

+2

@AJP、呼び出し元が返された値に関心があるかどうかにかかわらず、同じコードフラグメントを生成できる可能性があります。言い換えれば、後者の場合に "_ref"を "最適化"することは、コンパイラにもたらされる複雑さには価値がないかもしれません。 –

関連する問題