【问题标题】:CoffeeScript - pass an anonymous function with parametersCoffeeScript - 传递带有参数的匿名函数
【发布时间】:2012-07-20 21:53:56
【问题描述】:

我不知道如何传递带参数的匿名函数。这是我的情况:

class MyClass
  constructor: (@a) ->
    console.log("MyClass: created " + @a)

  show: ->
    console.log("MyClass: show " + @a)

然后,使用 UnderscoreJS,这行得通:

_.map listOfMyClassObjects, (obj) -> obj.show

但为了方便起见,我想将对 map 的调用包装在一个单独的函数中:

allMyClass(fun) ->
  _.map listOfMyClassObjects, fun(obj)

这样我以后可以做:

allMyClass((obj) -> obj.show())

但浏览器控制台显示:

Uncaught ReferenceError: fun is not defined
  (anonymous function)
  require../browser.CoffeeScript.run
  ...

什么是正确的合成器?另外,能不能这样简化?

 allMyClass(fun) ->
    _.map listOfMyClassObjects, obj[fun]()

 allMyClass(show())

更新:

根据 Thilo 的回答,函数调用中存在语法错误。而且,在 map 迭代结果上调用函数时出错。工作版本是这样的:

allMyClass = (fun) ->
  _.map listOfMyClassObjects, (obj) -> fun(obj)

如果有将类方法传递给allMyClass 函数的更短版本,仍然会徘徊。

更新 2:

可以这样简化:

allMyClass = (fun) ->
  _.map listOfMyclassObjects, (obj) -> obj[fun]()

allMyClass("show")

将参数传递给fun 将需要传递更多参数。

【问题讨论】:

  • 在 CoffeeScript 中,类主体本身是一个函数表达式,它被执行并返回实际的类构造函数。所以foo = 1 在类主体函数表达式本身的范围内设置了一个变量。而foo: 1 在类原型上设置了一个值为1foo 属性。

标签: javascript coffeescript


【解决方案1】:

你的意思是定义一个函数

allMyClass = (fun) ->
   _.map listOfMyClassObjects, fun(obj)

或方法

allMyClass : (fun) ->
   _.map listOfMyClassObjects, fun(obj)

如果没有=:,您只是在调用allMyClass

【讨论】:

  • 哦!只是不能习惯 CoffeeScript 函数符号)))就是这样!但是,我的代码还有一个问题,我已经在更新中描述了这一点。
  • 对于任何类型的语法错误,请将有问题的行粘贴到“Try CoffeeScript”中,然后查看 JS 的样子。 jashkenas.github.com/coffee-script
猜你喜欢
  • 2012-04-25
  • 1970-01-01
  • 2011-12-03
  • 2011-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-23
  • 2015-05-09
相关资源
最近更新 更多