2012-07-28 14 views
6

W dokumentacji CoffeeScript dla array splicing, jaki jest cel końcowej , _ref?Składanie tablic z coffeescript, po co jest _ref?

coffeescript:

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

gromadzi do:

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; 

Odpowiedz

7

To dlatego, że operacja jest krojenie coffeescript chce powrócić plasterek to właśnie przypisany, ale splice() zwraca usunięte elementy zamiast.

Tak, w tym celu, to kompiluje konstrukt do fragmentu kodu, który przydziela pierwszy kawałek do zmiennej lokalnej _ref, a następnie wykorzystuje comma operator powrót tej zmiennej po wywołaniu splice().

+0

+1 za link do operatora przecinka, Douglas Crockford zaleca, aby go nie używać, ponieważ może to prowadzić do "nadmiernie trudnych wyrażeń", więc myślę, że po prostu o tym zapomniałem. Odpowiedź może być niemożliwa, ale czy znasz powód, dla którego coffeeScript chce zwrócić wycinkę, którą właśnie przydzielił, mając na uwadze w tym przykładzie, że nie jest on używany przez nic ...? Dzięki. – AJP

+2

@AJP, prawdopodobnie dlatego, że może wygenerować ten sam fragment kodu, niezależnie od tego, czy osoba dzwoniąca jest zainteresowana zwróconą wartością. Innymi słowy, "optymalizacja" wyrażenia "_ref" w tym drugim przypadku może nie być warta dodatkowej komplikacji przynoszonej przez kompilator. –