Кажется, я нашел обходной путь.
Для начала я сначала выясню, в чем заключалась моя проблема.Скажем, пользователь ввел следующее:
class Test
attr_accesssor :data
def initialize(data = nil)
@data = data
end
end
, за которым следует
Test.new(4).data
eval
, вернёт верное значение 4.
Теперь скажите, однако, что пользователь вместо этогонаписал
Test.new("A nice, fine string").data
eval
ничего бы не вернул.
Однако я заметил, что если бы я нажал на .inspect
, как показано ниже:
Test.new("A nice, fine string").data.inspect
Мне бы вернули A nice, fine string
.
Поэтому мое решение заключалось в том, чтобы заключить весь код пользователя в круглые скобки, а затем вызвать .inspect
.
выполнено по следующей строке
code = "(" << code << ").inspect"
Спасибо всем, кто нашел время, чтобы помочь мне.Я действительно ценю все отзывы и предложения.