ruby - 如何在模块定义之外访问 Module.nesting 的返回

标签 ruby methods module namespaces constants

使用 Module.nesting 方法时,我可以从调用点返回嵌套模块列表。我在文档和其他地方看到的唯一示例显示了从嵌套模块定义中放置和运行的方法调用:

module M1
  module M2
    Module.nesting #=> [M1::M2, M1]
  end
end

在下面的例子中:

module A
  module B; end
  module C
    module D
      # I want to access the name-space chain from this point
    end
  end
end

# But how can I reference it from our here?
# A::C::D .... ?

有什么方法可以在定义模块后检查模块中的 namespace 链?

我能看到的唯一例子是在定义中创建一个变量来保存生成的调用,以便在定义之外再次引用:

module A
  module B; end
  module C
    module D
      $chain = Module.nesting
    end
  end
end

p $chain 
#=> [A::C::D, A::C, A]

有没有一种方法可以向上查找这个名称间隔链,而无需在定义中创建变量以供稍后引用?

最佳答案

在 Ruby 中,“记住”表达式值的方法是将该值赋给变量。

此外,模块定义的值是在主体内计算的最后一个表达式的值。

如果你把两者放在一起,你会得到这样的东西:

chain = module A
  module B; end
  module C
    module D
      Module.nesting
    end
  end
end

p chain 
# [A::C::D, A::C, A]

关于ruby - 如何在模块定义之外访问 Module.nesting 的返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59111532/

相关文章:

ruby - irb 无权访问我的模型(NameError : uninitialized constant)

ruby - 从ruby中的初始化调用方法时未定义的方法

java - 使用子类参数隐藏方法

python - 为什么 "import module"然后 "from package import module"再次加载模块?

python - 如何在 Python 模块中公开函数?

ruby-on-rails - 使用渲染后如何停止 Controller 执行? (使用 Ruby on Rails)

ruby-on-rails - FactoryGirl 在数据库中找不到实例

java - 从 Java 向 Clojure 传递参数

java - java中的(类)this.method和super.method

ruby-on-rails - Ruby -::in 类名