0

パラメータを取る無名関数を渡す方法がわかりません。これが私の状況です:

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

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

次に、UnderscoreJS を使用すると、これが機能します。

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

しかし、便宜上、マップへの呼び出しを別の関数にラップしたいと思います。

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 の回答によると、関数呼び出しに構文ミスがありました。また、マップの反復結果に対する関数の呼び出しに誤りがありました。作業バージョンは次のとおりです。

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

allMyClassただし、クラスメソッドを関数に渡す短いバージョンがある場合は、まだ迷っています。

更新 2:

次のように簡略化できます。

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

allMyClass("show")

に引数を渡すには、fun全体としてより多くの引数を渡す必要があります。

4

1 に答える 1

2

関数を定義するつもりでしたか

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

または方法

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

=またはなしで、:単に を呼び出していallMyClassました。

于 2012-07-22T10:14:05.317 に答える