2013-06-07 2 views

ответ

3

В CoffeeScript вы можете писать вызовы функций двумя способами:

foo(bar) # with parens 
foo bar # without parens 

Поскольку у вас есть пространство между sum и (1, 2), то вы делаете в скобки, функциональный вызов sum проходящее (1, 2) в качестве первого параметра, что эквивалентно к этому:

bar = (1, 2) 
sum bar 

проблема заключается в том, что (1, 2) не является допустимым выражением CoffeeScript. Чтобы передать два параметра, вы должны использовать любой из:

sum(1, 2) 
sum 1, 2 
1

Скобки служат для различных целей в CoffeeScript; здесь важны следующие цели:

  1. Группировка в выражениях.
  2. Функциональные вызовы.

Скобки для вызовов функций, часто по желанию, так что вы можете сказать следующее:

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.

Правило большого пальца: если вы хотите (или нужно) использовать круглые скобки для указания вызова функции, не помещайте между именем функции и открывающей скобкой пробела.

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