Как только я храню метод в контексте V8 ::, все последующие экземпляры этого метода, хранящиеся в любом контексте под любым именем, ведут себя как исходный (то есть, как если бы исходный экземпляр был снова хранится).Закрытие метода не работает в therubyracer
Я пытался изолировать/продемонстрировать проблемы со следующим:
require 'V8'
class TestClass
def test_method
self.inspect
end
end
(1..2).each do |cxt_i|
cxt = V8::Context.new
[:test_method, :test_method2].each_with_index do |method_name, method_i|
method = TestClass.new.method(:test_method)
cxt[method_name.to_s] = method
script = method_name.to_s+'()'
puts "Context #{cxt_i}, method #{method_i+1} result is #{method.call}, V8 returns #{cxt.eval(script)}"
end
end
Который производит следующий вывод:
Context 1, method 1 result is #<TestClass:0x007fce2419cdb0>, V8 returns #<TestClass:0x007fce2419cdb0>
Context 1, method 2 result is #<TestClass:0x007fce2419b780>, V8 returns #<TestClass:0x007fce2419cdb0>
Context 2, method 1 result is #<TestClass:0x007fce2419abc8>, V8 returns #<TestClass:0x007fce2419cdb0>
Context 2, method 2 result is #<TestClass:0x007fce24199a98>, V8 returns #<TestClass:0x007fce2419cdb0>
Я не получаю, что мой "V8 возвращает" различны в течение контексты 1 и 2 (но то же самое в контексте). –
@mu слишком коротко: я не понимаю ваш комментарий. Если вы имеете в виду, что у вас разные результаты, чем я, можете ли вы поделиться своим кодом и результатами? –
Тот же код, что и у вас. Я получаю значения V8, такие как 'A',' A', 'B',' B', где ваши - 'A',' A', 'A',' A'. Все еще не совсем то, чего вы ожидаете, но ближе. –