2013-04-26 2 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 с ruby ​​2.0.o он работает также хорошо –

ответ

2

Update:

Данная ошибка была исправлена ​​в 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. Попросите разработчика исправить ошибку, или
  5. Посмотрите, сможете ли вы убедить новую версию shikashi работать с evalhook 0.3.1.
3

Я разработчик шикаши, и я просто нажал фиксированную версию драгоценного камня evalhook (v0.5.2, зависимость шикаши). Чтобы обновить перл:

gem update evalhook 

И тогда он должен работать

Смежные вопросы