Как CoffeeScript определяет приоритеты параметров функции? - PullRequest
3 голосов
/ 25 октября 2011

Предположим, у нас есть 3 функции: раз, плюс и минус.Они делают то, что предлагает их имя.Затем мы создаем следующую строку в JavaScript:

times(plus(1,2) ,minus(5,2));

Когда написано в CoffeeScript, это:

times plus 1,2 , minus 5,2

И после компиляции в JavaScript, оно становится:

(function() {
  times(plus(1, 2, minus(5, 2)));
}).call(this);

Что не то, что мы хотим.Есть ли способ CoffeeScript, чтобы решить эту проблему, или мы должны использовать скобки?Спасибо,

Ответы [ 2 ]

9 голосов
/ 25 октября 2011

Как я объясняю в моей книге , у компилятора нет возможности узнать, какое правило вы хотите использовать для неявных скобок.Конечно, в случае

times plus 1,2, minus 5,2

для человека очевидно, что вы хотите, чтобы оно значило

times(plus(1,2), minus(5,2))

Но вы также можете написать

times 5, plus 1, parseInt str, 10

и ожидаем, что оно будет понято (как есть) как

times(5, plus(1, parseInt(str, 10))

Правило для неявных скобок CoffeeScript очень простое: они идут до конца выражения.Так, например, вы всегда можете вставить Math.floor перед математическим выражением.

В качестве стилистического аспекта я обычно опускаю только паренсы для первого вызова функции в строке, что позволяет избежать любой путаницы.Это означает, что я напишу ваш пример как

times plus(1,2), minus(5,2)

Неплохо, верно?

5 голосов
/ 25 октября 2011

В качестве альтернативы «обычным» пареням вызова функций, вы можете использовать стиль без паролей для функции call и парены только для приоритета , например:

times (plus 1, 2), (minus 5, 2)

Конечно, это только вопрос вкуса; times plus(1, 2), minus(5, 2) версия работает так же хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...