访问类的常量

当我有以下情况:

class Foo
CONSTANT_NAME = ["a", "b", "c"]


...
end

有没有一种方法来访问与 Foo::CONSTANT_NAME或我必须使一个类方法访问的值?

84527 次浏览

你发布的内容应该会非常有效:

class Foo
CONSTANT_NAME = ["a", "b", "c"]
end


Foo::CONSTANT_NAME
# => ["a", "b", "c"]

如果在包含常量的类中编写其他代码,则可以将其视为一个全局。

class Foo
MY_CONSTANT = "hello"


def bar
MY_CONSTANT
end
end


Foo.new.bar #=> hello

如果要访问类外部的常数,请在其前面加上类名,后面加两个冒号

Foo::MY_CONSTANT  #=> hello

有办法进入 Foo::CONSTANT_NAME吗?

是的,有:

Foo::CONSTANT_NAME

一些替代方案:

class Foo
MY_CONSTANT = "hello"
end


Foo::MY_CONSTANT
# => "hello"


Foo.const_get :MY_CONSTANT
# => "hello"


x = Foo.new
x.class::MY_CONSTANT
# => "hello"


x.class.const_defined? :MY_CONSTANT
# => true


x.class.const_get :MY_CONSTANT
# => "hello"