Ruby:如何访问匿名类中定义的常量?

时间:2011-06-20 10:19:59

标签: ruby-on-rails ruby

我可以访问常量AGE作为A :: AGE。如何访问常量NAME?(因为A::NAME会抛出错误。)

class A
  AGE=24
  class << self
    NAME="foo"
  end
end

注意:我正在尝试访问A类之外的常量。

注2:我使用的是Ruby 1.8.7

2 个答案:

答案 0 :(得分:9)

在Ruby 1.9.x中,Ruby提供了方法singleton_class。所以电话

irb(main):009:0> A.singleton_class::NAME
=> "foo"

做你想做的事。


在Ruby 1.8.x中,您可以自己实现方法singleton_class

class Object
  def singleton_class
    class << self; self; end
  end
end

然后你可以打电话:

A.singleton_class::NAME
=> "foo"

这是可能的,因为Ruby类总是可以进行扩展和更改。

答案 1 :(得分:1)

使用:

定义常量
self::NAME = "foo"

这将明确地将其绑定到self