Ruby:访问类的常量,例如类

时间:2013-08-29 22:06:41

标签: ruby

我有一个如下所示的课程:

class Foo
  MY_CONST = "hello"
  ANOTHER_CONST = "world"

  def self.get_my_const
    Object.const_get("ANOTHER_CONST")
  end
end

class Bar < Foo
  def do_something
    avar = Foo.get_my_const # errors here
  end
end

获得const_get uninitialized constant ANOTHER_CONST (NameError)

假设我只是在Ruby范围内做一些愚蠢的事情。我目前正在我正在测试此代码的机器上使用Ruby 1.9.3p0。

3 个答案:

答案 0 :(得分:3)

现在正在工作:

class Foo
  MY_CONST = "hello"
  ANOTHER_CONST = "world"

  def self.get_my_const
    const_get("ANOTHER_CONST")
  end
end

class Bar < Foo
  def do_something
    avar = Foo.get_my_const
  end
end

Bar.new.do_something # => "world"

您的以下部分不正确:

def self.get_my_const
    Object.const_get("ANOTHER_CONST")
end

在方法get_my_const中,self是Foo。所以删除Object,它会工作..

答案 1 :(得分:3)

您可以使用const之类:

Foo::MY_CONST
Foo::ANOTHER_CONST

您可以获得一系列常量:

Foo.constants
Foo.constants.first

使用您的代码:

class Foo
    MY_CONST = 'hello'

    def self.get_my_const
        Foo::MY_CONST
    end
end


class Bar < Foo
    def do_something
        avar = Foo.get_my_const
    end
end


x = Bar.new
x.do_something

答案 2 :(得分:1)

我建议您通过自我MTKView,以便始终获得正确的常量。

self.class.const_get("MY_CONST")