gpt4 book ai didi

ruby - "pollute the global namespace"是什么意思?

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

在 ruby​​ 中,一些 gems 选择“污染全局命名空间”。

这是什么意思?
我如何才能看到它发生在哪里?
为什么 gem 需要这样做?

当面对污染全局命名空间和冲突的两个 gem 时,当我选择“隔离”一个时,我要做出哪些权衡?

例如:

我正在使用两个污染全局命名空间的 gem:prygli所以我无法再将我的 binding.pry 放在我想要的地方。

一个solution就是将整个cli包装在一个模块中:

module Wrapper
include GLI::App

extend self
program_desc "..."
...

exit run ARGV
end

现在我可以在任何需要的地方使用我的 binding.pry

为什么这样做?
当我选择“隔离 gli”时,我在做什么权衡?还是“隔离 GLI::App 模块”?

最佳答案

Ruby 有一个由所有代码共享的单一根命名空间,您在其中定义的任何常量和全局变量在整个应用程序中都是通用的。如果您不注意命名空间,这将使冲突不可避免。

module 构造是作为命名空间原语存在的,所有常量都是局部的,所有类都在其中定义。如果愿意,您也可以将类用作命名空间,这取决于您。

强制将某些内容include 放入根 namespace 是一个大问题。这通常只能在相当小且独立的快速脚本中完成。当您做任何重要的事情时,这是一个坏习惯,因为它会将这两个上下文中的所有常量和方法混在一起,可能会覆盖它们。

关于ruby - "pollute the global namespace"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41406586/

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