gpt4 book ai didi

ruby - 冲突的 ruby

转载 作者:数据小太阳 更新时间:2023-10-29 06:59:29 25 4
gpt4 key购买 nike

我需要在我的项目中使用两个都声明 PDF 命名空间的 gem:pdf-reader 和 htmldoc。

有没有办法让他们一起玩得开心?我能想到的唯一方法是重写我自己的 htmldoc 版本,给它一个不同的命名空间。

最佳答案

基本上,您无能为力。在 Ruby 中,在顶级命名空间中使用 distinctive 名称是一个很好的做法,恰好 出于这个原因,而您恰好偶然发现了两个违反该做法的库。

可以做的一件事是使用Kernel#load 而不是Kernel#requireKernel#load 接受一个可选的 bool 参数,它将告诉它在匿名模块中评估文件。但是请注意,这绝不是安全的:完全有可能显式将内容放入顶级命名空间(使用类似module::PDF的东西)并且从而跳出匿名模块。

另请注意,该 API 非常糟糕:load 仅返回 truefalse,就像 require做。 (实际上,由于 load 总是 加载,它总是 返回 true。)实际上没有办法 get 在匿名模块。您基本上必须手动将其从 ObjectSpace 中取出。哦,当然,由于实际上没有任何内容引用匿名模块,它将被垃圾收集,因此您不仅需要在 ObjectSpace 内部翻找才能找到 模块,您还必须赛跑垃圾收集器。

有时候,我希望 Ruby 有一个合适的模块系统,比如 Newspeak、Standard ML 或 Racket。

关于ruby - 冲突的 ruby ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4495512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com