Ruby 什么';s等于$SAFE=4?

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

我在玩线程和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或更大,则会引发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