当我有以下内容时:
class Foo
CONSTANT_NAME = ["a", "b", "c"]
...
end
有没有一种方法可以通过 Foo::CONSTANT_NAME
访问,或者我必须创建一个类方法来访问这个值?
当我有以下内容时:
class Foo
CONSTANT_NAME = ["a", "b", "c"]
...
end
有没有一种方法可以通过 Foo::CONSTANT_NAME
访问,或者我必须创建一个类方法来访问这个值?
你发布的应该完美地工作:
class Foo
CONSTANT_NAME = ["a", "b", "c"]
end
Foo::CONSTANT_NAME
# => ["a", "b", "c"]
其他选择:
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"
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
.freeze
!CONSTANT_NAME = ["a", "b", "c"].freeze
- mutexkid::
和.
;) - Nick.
和::
?谢谢。 - wuarmin::
是用于模块/类级别的东西(所以在上面,CONSTANT_NAME 是一个类的“静态”属性)。你也可以用它来命名空间模块,例如ActiveRecord::Base
。.
用于实例属性和方法(例如Foo.new
)。虽然我相信您可以使用.
来调用静态方法... 在 SO 上有很多关于它的讨论.. 例如:https://dev59.com/dWgu5IYBdhLWcg3w0qVK#11043499 - Nick