ruby メソッドをjavascript 関数へのコールバックとして渡したいと思っていると思いますが、次のようなことを試すことができます。
x = { bar: method(:foo).to_proc }
x.to_n
ただし、これはクラス メソッドに対して意図したとおりに機能しない可能性があることに注意してください (コンテキストはjavascriptで変更される可能性があります) 。
別のオプションは、ラムダでそのメソッド呼び出しをラップするだけです
x = { bar: ->{ foo } }
x.to_n
これは私の経験上、より安全なアプローチのようです
編集:
私の最初の答えは を参照method(:foo)
しましたが、これを呼び出すと、 opal が無名関数に適切にブリッジしないMethodオブジェクトを取得するため、javascript で次のように使用する必要があります。
console.log(#{x.to_n}.bar.$call())
として機能させるfunction
には、proc である必要があるため、 を呼び出す必要がありますto_proc
。また、インスタンス メソッドの場合、これはおそらく壊れます。
class Test
def initialize
@var = "baz"
end
def foo
"bar #{@var}"
end
end
t = Test.new
x = { bar: t.method(:foo).to_proc }
`console.log(#{x.to_n}.bar())` # bar undefined
y = { bar: ->{ t.foo } }
`console.log(#{y.to_n}.bar())` # bar baz