2013-04-26 80 views
4

我有Shikashi問題調用方法時,與一個以上的參數:Shikashi:引發ArgumentError:錯誤的參數數目與沙盒代碼

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:錯誤的參數數量(1爲2)

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

當我稱之爲t他沙盒都很好。

的哪些錯誤?我使用的紅寶石1.9.3-P194

+0

沒有沙箱和Ruby 1.8.6它很適合我http://codepad.org/eaPWM6pM,可能是它的一個行爲紅寶石版本,所以你可以嘗試其他紅寶石版本?順便說一句。在這裏 - > http://www.compileonline.com/execute_ruby_online.php與紅寶石2.0.o它的作品也很好 – 2013-04-26 07:02:21

回答

2

更新:

的錯誤已被固定在evalhook版本0.5.2;升級到這一切,都應該是好的。

原來的答案:

有一個在evalhook的所有版本(什麼shikashi使用在eval代碼)中的錯誤大於0.3.1,其中方法只被調用的第一個參數。例如:

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. 讓開發人員修復這個bug,或者
  5. 看看你是否可以說服更新版本的shikashi使用evalhook 0.3.1。
3

我是shikashi的開發者,我只是推了固定版本的evalhook gem(v0.5.2,shikashi的依賴)。要更新的寶石:

gem update evalhook 

然後它應該工作

相關問題