Ruby 什么';s等于$SAFE=4?
我在玩线程和eval时遇到了一个问题。我的代码是:Ruby 什么';s等于$SAFE=4?,ruby,eval,Ruby,Eval,我在玩线程和eval时遇到了一个问题。我的代码是: thread = Thread.start { $SAFE = 4; eval("`touch ~/test`") } thread.join 但它会导致一个错误: ArgumentError: $SAFE=4 is obsolete from (irb):2:in `block in irb_binding' 我发现,$SAFE=4在以下方面变得过时: $SAFE=4已过时。如果$SAFE设置为4或更大,则会引发Argum
thread = Thread.start {
$SAFE = 4;
eval("`touch ~/test`")
}
thread.join
但它会导致一个错误:
ArgumentError: $SAFE=4 is obsolete
from (irb):2:in `block in irb_binding'
我发现,$SAFE=4
在以下方面变得过时:
$SAFE=4已过时。如果$SAFE设置为4或更大,则会引发ArgumentError
但是没有提到应该用什么来代替。是否有相当于
$SAFE=4
?基本上,我想要的是以最安全的方式运行eval
。我能看到的唯一方法是利用绑定进行安全eval
这并不能阻止一切。例如,
eval(“ENV['FOO']='bar',b1)
仍然会影响外部。
class Demo
def initialize(n)
@secret = n
end
def get_binding
return binding()
end
end
k1 = Demo.new(99)
b1 = k1.get_binding
k2 = Demo.new(-3)
b2 = k2.get_binding
eval("@secret", b1) #=> 99
eval("@secret", b2) #=> -3
eval("@secret") #=> nil