パラメータを取る無名関数を渡す方法がわかりません。これが私の状況です:
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
全体としてより多くの引数を渡す必要があります。