Скобки служат для различных целей в CoffeeScript; здесь важны следующие цели:
- Группировка в выражениях.
- Функциональные вызовы.
Скобки для вызовов функций, часто по желанию, так что вы можете сказать следующее:
console.log 6, 11
и все в порядке. Проблема возникает, когда есть некоторая двусмысленность между группировкой скобок и вызовами функций. Рассмотрим следующее:
f = (n) -> 2*n
f (1 + 2) + 3
Каков результат? Если круглые скобки для группировки, то мы имеем:
x = (1 + 2) + 3 # 6
f x # 12
но если круглые скобки указывают на вызов функции, то мы имеем:
x = 1 + 2 # 3
y = f x # 6
y + 3 # 9
Так есть некоторая неопределенность относительно того, что означают скобки и результат выражение зависит от того, как эта неоднозначность разрешена. Если есть пробел между именем функции и открывающей скобки:
f (1 + 2) + 3
затем CoffeeScript использует скобки для группировки и заполнения дополнительных скобках, вызов функции рассматривается как это:
x = (1 + 2) + 3
f(x)
Однако, если нет каких-либо пространство, то оно рассматривается как:
x = (1 + 2)
f(x) + 3
так что, если есть пространство перед открытием скобки, то CoffeeScript предполагает, что он должен заполнить I n подразумеваемые круглые скобки для вызова функции; если нет пробела, то скобки рассматриваются как явные, а не подразумеваемые.
Теперь мы можем посмотреть на ваш конкретный случай:
console.log (sum (1, 2))
Пространства после log
и sum
показывают, что круглые скобки используются для группировки и (1, 2)
не является допустимым выражением CoffeeScript.
Правило большого пальца: если вы хотите (или нужно) использовать круглые скобки для указания вызова функции, не помещайте между именем функции и открывающей скобкой пробела.