Почему моя программа CoffeeScript выдает ошибку «число не является функцией»? - PullRequest
0 голосов
/ 28 января 2012

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

1 Ответ

0 голосов
/ 28 января 2012

Это функция, а не число:

(n) -> ([0..n].reduce (a, b) -> a + b)

поэтому, когда вы говорите это:

newSqSum = sq ((n) -> ([0..n].reduce (a, b) -> a + b))

вы вызываете sq с функцией в качестве аргумента. Затем sq попытается умножить эту функцию на себя, и в результате получится NaN, поскольку отсутствует разумное числовое представление функции. И наконец, ваш третий console.log пытается вызвать это значение NaN как функцию, и появляется ваше сообщение об ошибке.

Что-то в форме fn1 fn2 для функций f1 и f2 не является композицией функций, фактически это то же самое, что и запись fn1(fn2), и это не приведет к созданию новой функции, если fn1 явно создан для возврата функции. Если вы хотите составить функции, то я думаю, что вам нужно сделать это вручную:

newSqSum = (n) -> sq ((n) -> ([0..n].reduce (a, b) -> a + b)) n
# Or with less hate for the people maintaining your code:
newSqSum = (n) -> sq sqSum n
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...