加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – “污染全局命名空间”是什么意思?

发布时间:2020-12-17 02:09:39 所属栏目:百科 来源:网络整理
导读:在 ruby中,一些宝石选择“污染全局命名空间”. 这是什么意思? 我怎么能看到它发生在哪里? 为什么宝石需要这样做? 当面对污染全局命名空间和冲突的两个宝石时,当我选择“隔离”时,我会做出哪些权衡? 例如: 我正在使用两个都污染全局命名空间的宝石:pry
在 ruby中,一些宝石选择“污染全局命名空间”.

这是什么意思?
我怎么能看到它发生在哪里?
为什么宝石需要这样做?

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

例如:

我正在使用两个都污染全局命名空间的宝石:pry和gli所以我无法将binding.prys放在我想要的地方.

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

module Wrapper
  include GLI::App

  extend self
  program_desc "..."
  ...

  exit run ARGV
end

现在我可以在任何我想要的地方使用我的binding.prys.

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

解决方法

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

模块构造作为命名空间原语存在,所有常量都是本地的,所有类都在其中定义.如果您愿意,也可以使用类作为命名空间,这取决于您.

强制将某些内容包含在根命名空间中是一个很大的问题.这通常只能在相当小且独立的快速脚本中完成.当你做任何非平凡的事情时,这是一个坏习惯,因为它将这两个上下文中的所有常量和方法混合在一起,可能会过度编写它们.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读