在 ruby 中,一些 gem 选择“污染全局命名空间”。
这是什么意思?
我怎样才能看到它发生在哪里?
为什么宝石需要这样做?
当面对两个污染全局命名空间并相互冲突的 gem 时,当我选择“隔离”一个时,我会做出什么权衡?
例如:
我正在使用两个都污染全局命名空间的 gem:pry和gli,所以我无法再将我binding.pry
的 s 放在我想要的地方。
一种解决方案是将整个 cli 包装在一个模块中:
module Wrapper
include GLI::App
extend self
program_desc "..."
...
exit run ARGV
end
现在我可以在binding.pry
任何我想要的地方使用我的 s。
为什么这样做?
当我选择“隔离 gli”时,我做了哪些权衡?还是“隔离GLI::App
模块”?