web-dev-qa-db-ja.com

クラスの定数へのアクセス

次のものがある場合:

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

  ...
end

Foo::CONSTANT_NAMEでアクセスする方法はありますか、または値にアクセスするにはクラスメソッドを作成する必要がありますか?

130
Jeremy Smith

投稿した内容は完全に機能するはずです。

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

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

クラス内に定数を含む追加のコードを記述している場合、それをグローバルのように扱うことができます。

class Foo
  MY_CONSTANT = "hello"

  def bar
    MY_CONSTANT
  end
end

Foo.new.bar #=> hello

クラス外の定数にアクセスしている場合は、クラス名を接頭辞に付け、その後に2つのコロンを付けます

Foo::MY_CONSTANT  #=> hello
40
maček

いくつかの選択肢:

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"
38
aidan

Foo::CONSTANT_NAMEにアクセスする方法はありますか?

はいあります:

Foo::CONSTANT_NAME
17
Jörg W Mittag