ruby - 模块类 << 自常量

标签 ruby module constants self

有我的L常量吗?

module M
  class Z
    class << self
      L = "foo"
    end
  end
end

=> M::Z::L
=> NameError: uninitialized constant M::Z::L
=> M::Z.constants
=> []

module B
  class N
    X = "bar"
  end
end

=> B::N::X
=> "bar"
=> B::N.constants
=> [:X]

我读了this但我不明白。

最佳答案

你需要这样做:

module M
  class Z
    class << self
      L = "foo"
    end
  end
end

M::Z.singleton_class::L # => "foo"

L 定义在 Z 的单例类中。

"L"存放在M::Z单例类的常量集合中,你可以称它为S现在。 M::Z::L 它实际上是在 M::Z 及其祖先的常量表中搜索这个常量 L。因为它们都不是 S,所以查找失败。

关于ruby - 模块类 << 自常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22345835/

相关文章:

ruby-on-rails - rake 测试准备 : NoMethodError: undefined method `[]' for nil:NilClass

ruby - config.ru if 生产语句

ruby-on-rails - 从模块访问 session 变量或 Controller 变量

javascript - 在单个文件中 bundle typescript 输出

Rust 中的嵌套常量

c++ - 这个函数只会被调用一次吗?

ruby - 拆分开始和结束时的空字符串

ruby-on-rails - 在 Posts 模型中保存的用户 ID,如何呈现该用户?

linux - 如何在内核模式(Linux)下从串口读取数据(字符)?

c++ - 为什么静态数组成员变量在调用对象的实例后不显示任何内容?