一组预定义的对象必须聚合成一个新对象。但是我希望用户为此指定一个自定义函数。
现在天真的方法是
def foo; end
objects = [1,2,3]
# result = eval(user_script)
result = eval("objects.inject {|sum, n| sum + n }")
我显然不想做什么!我读过$SAFE = 4
(见这里),但我不确定这是否足够。特别是因为用户定义的脚本仍然可以调用其他函数,例如foo
. 我只想允许访问基本的非危险 Ruby 核心功能。
Ruby 是否有任何工具可以安全地执行用户定义的脚本?我不需要是 Ruby 语法。不过,这会很好。