Ruby 本机对象中的Opal.rb匿名函数

Ruby 本机对象中的Opal.rb匿名函数,ruby,opalrb,Ruby,Opalrb,是否可能以某种方式实现哈希中指定的方法/lambda,以编译为本机对象中的本机函数? 比如让 x = {foo: "foo", bar: ->{"bar"}} 我需要x像本机对象那样编译: 伪 好的,这几乎和预期的一样 有没有办法将方法传输到本机函数 e、 g 应用类似于 (??:foo??).to_n => function(){return "bar";}; ?我猜您想将ruby方法作为回调传递给javascript函数,您可以尝试以下方法: x = { bar: me

是否可能以某种方式实现哈希中指定的方法/lambda,以编译为本机对象中的本机函数? 比如让

x = {foo: "foo", bar: ->{"bar"}}
我需要
x
像本机对象那样编译:

好的,这几乎和预期的一样

有没有办法将方法传输到本机函数 e、 g

应用类似于

(??:foo??).to_n
=>
function(){return "bar";};

我猜您想将ruby方法作为回调传递给javascript函数,您可以尝试以下方法:

   x = { bar: method(:foo).to_proc }
   x.to_n
但是请记住,这可能不会像类方法那样工作(javascript上的上下文可能会发生变化)

另一个选项是在lambda上包装该方法调用

   x = { bar: ->{ foo } }
   x.to_n
根据我的经验,这似乎是一种更安全的方法


编辑:

我的第一个答案只是引用了
方法(:foo)
,但是当你调用它时,你会得到一个方法对象,它不能正确地连接到匿名函数,所以它需要你在javascript上像这样使用它:

  console.log(#{x.to_n}.bar.$call())
要让它作为一个
函数
工作,您需要它是一个proc,因此需要调用
来_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

我不是一个聪明人((,一切都按预期工作)添加了额外的问题。
console.log(#{x.to_n}.bar())
with-method(:foo)未编译为合法函数,但lamba工作正常,方法(:foo)在您的代码中工作吗?
  console.log(#{x.to_n}.bar.$call())
  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