模块类<<自我常数

时间:2014-03-12 08:29:31

标签: 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,但我不明白。

1 个答案:

答案 0 :(得分:3)

你需要这样做:

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

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

LZ的单例类中定义。

"L"存储在M::Z的单例类的常量集中,您现在可以将其称为SM::Z::L它实际上是在L及其祖先的常量表中搜索此常量M::Z。由于它们都不是S,因此查找失败。