Причина этого в том, что круглые скобки для вызова функции (вызова) являются необязательными. Я нахожу это постоянной путаницей в своем собственном коде и придерживаюсь общей политики, заключающейся в том, чтобы всегда включать скобки, чтобы прояснить ситуацию.
В сценарии кофе, если вы пропустите скобки, предполагается, что список аргументов идет до конца строки. Ваш первый пример сценария кофе на самом деле такой же:
nums = [1..10].map((i) -> i*2)
где первый аргумент вызова map является функцией (i)->i*2
Если вы удалите пробел между картой и (i), то сценарий кофе подразумевает круглые скобки вокруг остальной части строки. Ваш второй пример сценария кофе на самом деле такой же, как этот:
nums = [1..10].map(i)(-> i*2)
Здесь вы можете видеть, что map вызывается с i
в качестве единственного аргумента, а затем сценарий coffee ожидает, что вызов map(i)
вернет функцию, которая затем вызывается с передачей ->i*2
или будет более явной ()->i*2
в качестве аргумента.
Учитывая, что сценарий кофе предназначен для устранения потенциальных опасностей кодирования javascript, я думаю, что было бы намного безопаснее, если бы они не включили эту подразумеваемую скобку.