4

在调用具有多个参数的方法时,我遇到了 Shikashi 问题:

class MyTest

    def self.think message
    end

    def self.say person,message
    end
end

include Shikashi

privileges = Privileges.new        
privileges.allow_const_read "MyTest"
privileges.object(MyTest).allow_all
privileges.instances_of(MyTest).allow_all  

Sandbox.new.run(privileges, "MyTest.think('you')")  

Sandbox.new.run(privileges, "MyTest.say('you', 'hi there')")    

这个有效

Sandbox.new.run(privileges, "MyTest.think('you')")  

在这里我得到一个 ArgumentError: wrong number of arguments (1 for 2)

Sandbox.new.run(privileges, "MyTest.say('you', 'hi there')")

当我在沙盒之外调用它时,一切都很好。

怎么了?我正在使用 ruby​​-1.9.3-p194

4

2 回答 2

3

我是 shikashi 的开发人员,我刚刚推送了 evalhook gem 的固定版本(v0.5.2,shikashi 的依赖项)。要更新宝石:

gem update evalhook

然后它应该工作

于 2013-04-26T14:48:19.080 回答
2

更新:

该错误已在 evalhook 版本 0.5.2 中修复;升级到那个,一切都应该很好。

原答案:

在 0.3.1 以上的所有版本的 evalhook(shikashi 用来评估代码)中都存在一个错误,其中仅使用第一个参数调用方法。例如:

Sandbox.new.run(privileges, "MyTest.think('you', 'hi there')")

工作得很好,忽略第二个参数。

不幸的是,依赖项的设置方式,您需要降级到 shikashi 0.3.1 才能使用 evalhook 0.3.1,但至少对我而言,shikashi 0.3.1 已损坏且无法安装。我认为你的选择是:

  1. 不要使用shikashi,
  2. 不要在沙箱中使用具有多个参数的方法,
  3. 追踪并修复 evalhook 中的错误,
  4. 让开发人员修复错误,或
  5. 看看你是否可以说服新版本的 shikashi 使用 evalhook 0.3.1。
于 2013-04-26T13:39:25.717 回答