我希望加载一些库,让它们做一些工作,然后执行require
的相反操作,以避免以后出现兼容性错误。我不想转储到文件并重新启动外壳程序,因为创建的对象(例如data
)可以被我的其他库很好地处理,只是在我寻找的早期库中不存在卸载。
任何人有任何建议或知道是否可行? A conversation from 2006并没有得出太多结论,只是“看起来Webrick设法做到了这一点”。
有问题的库是Google_drive and Nokogiri(如该链接所述,电子表格处理库Roo依赖于Google_drive进行在线电子表格读写)。>>
我希望加载一些库,让它们做一些工作,然后执行require的相反操作,以避免以后出现兼容性错误。我不想转储到文件并重新启动Shell,因为...
[就像@Alex所说,您可以使用Kernel#fork
创建一个新的ruby进程,在其中将Kernel#fork
您的库。新的分叉进程将有权访问父进程中加载的数据:
我不知道有什么方法可以卸载文件,但是您可以将选择的全局变量重置为nil并取消定义常量(足够接近):
[不幸的是,Ruby的几个特性最终都希望完全“卸载”一个库。首先,“加载” Ruby库可以运行任意Ruby代码。其次,可以在Ruby中动态地重新定义现有的常量和方法。