2012-07-28 10 views
6

array splicing için CoffeeScript belgelerinde, , _ref izinin amacı nedir?Coffeescript ile dizi ekleme, _ref nedir?

CoffeeScript:

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

için derler:

CoffeeScript en dilimleme işlemi sadece atadığı dilim dönmek istiyor, ancak bunun yerine kaldırılan elementler splice() döndürdüğü için var
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; 

cevap

7

.

Yani, bunu başarmak için, öncelikle yerel _ref değişkene dilim atayan bir kod parçası haline yapı, daha sonra splice() çağrıldıktan sonra bu değişkeni dönmek için comma operator kullanır derler. Komut operatörüne bağlantı için

+0

+1, Douglas Crockford, 'aşırı zor ifadelere' yol açabileceğinden kullanmayı önermektedir, sanırım bunu unutmuşumdur. Bu cevap vermek imkansız olabilir, ancak bu örnekte akılda tutulan dilimin kahveScript'in dönmek istediğinin sebebini biliyor musunuz? Teşekkürler. – AJP

+2

@AJP, muhtemelen arayanın döndürülen değerle ilgilenip ilgilenmediği aynı kod parçasını oluşturabileceğinden. Diğer bir deyişle, ikinci durumda "_ref" in "optimize edilmesi", derleyiciye getirilen ek karmaşıklığa değmeyebilir. –