首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的CoffeeScript程序会出现'number is not a function‘错误?

为什么我的CoffeeScript程序会出现'number is not a function‘错误?
EN

Stack Overflow用户
提问于 2012-01-28 11:47:04
回答 1查看 443关注 0票数 0

在下面的程序中,前两个日志运行良好。我在第三个也是最后一个日志中没有做任何新的事情,但不知何故它在运行时崩溃了。我的脚本中的错误在哪里?我已经看了很多次了,它看起来像是对上面经过验证的工作代码的一个相当微不足道的修改。

代码语言:javascript
运行
复制
sumSq = (n) -> ([0..n].map (i) -> i * i).reduce (a, b) -> a + b
sq = (n) -> n * n
sqSum = ((n) -> ([0..n].reduce (a, b) -> a + b))
console.log(sqSum 5)
console.log(sq(sqSum 5))
newSqSum = sq ((n) -> ([0..n].reduce (a, b) -> a + b))
console.log(newSqSum(5))
EN

回答 1

Stack Overflow用户

发布于 2012-01-28 12:10:18

这是一个函数,不是一个数字:

代码语言:javascript
运行
复制
(n) -> ([0..n].reduce (a, b) -> a + b)

所以当你这么说的时候:

代码语言:javascript
运行
复制
newSqSum = sq ((n) -> ([0..n].reduce (a, b) -> a + b))

您使用一个函数作为其参数来调用sq。然后,sq将尝试将该函数与其自身相乘,结果将是NaN,因为函数没有合理的数字表示。最后,您的第三个console.log尝试将该NaN值作为函数调用,这就是您的错误消息。

对于函数f1f2,某种形式的fn1 fn2不是函数组合,它实际上等同于编写fn1(fn2),除非fn1显式构造为返回函数,否则不会生成新函数。如果你想编写函数,那么我认为你需要手动完成:

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9042759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档