我猜你想将ruby 方法作为回调传递给javascript 函数,你可以尝试这样的事情:
x = { bar: method(:foo).to_proc }
x.to_n
但请记住,这可能无法按类方法的预期工作(上下文可能会在javascript上发生变化)
另一种选择是将该方法调用包装在 lambda 上
x = { bar: ->{ foo } }
x.to_n
根据我的经验,这似乎是一种更安全的方法
编辑:
我的第一个答案刚刚引用method(:foo)
,但是当您调用它时,您会得到一个Method对象,该对象 opal 无法正确桥接到匿名函数,因此需要您在 javascript 上像这样使用它:
console.log(#{x.to_n}.bar.$call())
要让它像你一样工作,function
你需要它是一个过程,所以需要调用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