访问类的常量变量

Jer*_*ith 132 ruby ruby-on-rails constants

当我有

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

  ...
end
Run Code Online (Sandbox Code Playgroud)

有没有办法访问Foo::CONSTANT_NAME或我必须使用类方法来访问该值?

Dyl*_*kow 231

你发布的内容应该是完美的:

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

Foo::CONSTANT_NAME
# => ["a", "b", "c"]
Run Code Online (Sandbox Code Playgroud)

  • 为了真正成为一个常数,不要忘记在值的末尾添加.freeze!`CONSTANT_NAME = ["a","b","c"].冻结 (11认同)
  • 总是混淆`::`和`.`;) (4认同)
  • 嗯,我早先测试时一定输入错误.哎呀:) (2认同)

mač*_*ček 40

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

class Foo
  MY_CONSTANT = "hello"

  def bar
    MY_CONSTANT
  end
end

Foo.new.bar #=> hello
Run Code Online (Sandbox Code Playgroud)

如果您在类外部访问常量,请在其前面加上类名,后跟两个冒号

Foo::MY_CONSTANT  #=> hello
Run Code Online (Sandbox Code Playgroud)


aid*_*dan 40

一些替代品:

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"
Run Code Online (Sandbox Code Playgroud)


Jör*_*tag 17

有办法访问Foo::CONSTANT_NAME吗?

就在这里:

Foo::CONSTANT_NAME
Run Code Online (Sandbox Code Playgroud)