2015-12-07 2 views
0

Каков правильный способ передачи функции в качестве параметра в liveScript?Передача анонимных функций в качестве параметров в livescript

Например, позволяет сказать, что я хочу использовать массив уменьшить функцию, в конвекционном Javascript Я пишу это как следующий

myArray.reduce(function (a,b) {return a + b}); 

Это приводит к LiveScript довольно красиво, как:

myArray.reduce (a,b) -> a + b 

Теперь я хочу установить начальное значение, предоставив второй параметр:

myArray.reduce(function (a,b) {return a + b},5); 

Как перевести это на liveScript? Кажется, что первая функция переопределяет любую способность передавать дополнительные параметры для уменьшения.

Извинения, если я упустил что-то очевидное, но я не могу найти что-либо отношение к этому сценарию в документации

ответ

1

Вы должны обернуть замыкание в ()

[1,2,3].reduce ((a,b) -> a + b), 0 

компилирует

[1, 2, 3].reduce(function(a, b){ 
    return a + b; 
}, 0); 
0

Чтобы дополнить другой ответ, LiveScript предлагает бинопы, просто поместите круглые скобки вокруг оператора.

[1 2 3].reduce (+), 0 
2

Для более сложных функций, я бы рекомендовал вам использовать этот стиль

[1, 2, 3].reduce do 
    (a, b) -> 
    # your code here 
    0 
2

Вы можете использовать ~ связать this аргумент, затем вызвать flip на него, чтобы поменять местами первый и второй параметры:

flip [1, 2, 3]~reduce, 0, (a, b) -> a + b 

Это может быть более читаемым, если тело обратного вызова очень длинное.

Смежные вопросы