Почему CoffeeScript требует пробелов после карты? - PullRequest
5 голосов
/ 26 января 2012

Этот код

nums = [1..10].map (i) -> i*2

Работает

В то время как это

nums = [1..10].map(i) -> i*2

сломан

Ответы [ 2 ]

6 голосов
/ 26 января 2012

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

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

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, я думаю, что было бы намного безопаснее, если бы они не включили эту подразумеваемую скобку.

4 голосов
/ 26 января 2012

map(i) во втором интерпретируется как вызов функции.JavaScript выглядит так:

var nums;

nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(i)(function() {
  return i * 2;
});

, и это не имеет никакого смысла, потому что map не возвращает функцию и не определено i.

Вво-первых, пробел превращает его в [1..10].map((i) -> i*2), поэтому в итоге вы вызываете map с функцией в качестве аргумента;JavaScript в этом случае выглядит следующим образом:

var nums;

nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(function(i) {
  return i * 2;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...