Project1

标题: 如何实现在沙盒中运行Ruby脚本 [打印本页]

作者: 墨凌羽    时间: 2015-7-9 17:26
标题: 如何实现在沙盒中运行Ruby脚本
对于require进来的脚本用什么办法可是让其在沙盒里运行QAQ

作者: taroxd    时间: 2015-7-9 17:38
要在沙盒里运行说明这里根本不该使用 require。
可以使用 load,并把第二个参数设为 true(参考 Ruby 文档)
作者: 墨凌羽    时间: 2015-7-9 18:01
taroxd 发表于 2015-7-9 17:38
要在沙盒里运行说明这里根本不该使用 require。
可以使用 load,并把第二个参数设为 true(参考 Ruby 文档 ...
若可选参数priv的值为真,则在内部生成一个无名模块作为顶层来进行加载和运行,这便不会污染全局名字空间了.

插到了这么一句,但还是不太理解,如果生成一个无名顶层模块的话,那怎么和已有的部分进行数据交换?看样子命名空间是独立那怎么访问里面的变量之类的QAQ
还有include、load、require三者的区别是什么(主要是include和其他两个的区别)?我看到太古的有个部分是用的include,这又是为什么呢?
作者: 晴兰    时间: 2015-7-13 20:49
提示: 作者被禁止或删除 内容自动屏蔽
作者: 墨凌羽    时间: 2015-7-14 23:01
晴兰 发表于 2015-7-13 20:49
看你的目的是啥,可能你要的是语法检查那就有特殊trick

目的是实现MOD。。。不想搞dsl所以打算直接requireruby的脚本。。。。因为出错就会退出,希望能像饥荒一样,出错会关闭MOD然后重载游戏。另外还希望能和饥荒一样,mod里的脚本会覆盖原有的同名的module/class之类的
作者: 晴兰    时间: 2015-7-15 09:33
提示: 作者被禁止或删除 内容自动屏蔽
作者: 墨凌羽    时间: 2015-7-15 11:25
晴兰 发表于 2015-7-15 09:33
自写一个require,处理一下出错的问题,其他的沿用原本的require就行。module/class的默认行为是猴补=mon ...

我在想用ensure或rescue捕获异常是不是就可以。。。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1