2016-09-28 12 views

答えて

7

Rubyでは、オブジェクトの変数(変数)を読み書きするには、そのオブジェクトのメソッドを使用する必要があります。例:

class TestClass 
    @@variable = "var" 
    def self.variable 
    # Return the value of this variable 
    @@variable 
    end 
end 

p TestClass.variable #=> "var" 

Rubyには、簡単なアクセサメソッドを作成するための組み込みメソッドがいくつかあります。あなたは、(代わりにクラス変数の)クラスにインスタンス変数を使用する場合:

class TestClass 
    @variable = "var" 
    class << self 
    attr_accessor :variable 
    end 
end 

のRuby on Railsは、クラス変数のために特別にa convenience methodを提供しています:

class TestClass 
    mattr_accessor :variable 
end 
+0

あなたは 'cattr_accessor'を意味しませんでしたか? :) –

+0

cattr_accessorはより良い名前ですが、それはmattr_accessorのエイリアスです(リンクごとに)。 – Phrogz

+3

また、 'Object#instance_variable_get'はすべてのインスタンス変数(' @ ')へのアクセスを許可し、' Object#class_variable_get'はクラス変数( '@@')に対して同じものを提供するので、アクセッサメソッドを持つ必要はありません。明示的なゲッターメソッドの必要性'TestClass.instance_variable_get(:@ variable)'または 'TestClass.class_variable_get(:@@ variable)' – engineersmnky

2

あなたは正しくクラス変数にアクセスする必要が。その1つは次の通りです:

class TestClass 
    @@varible = "var" 

    class << self 
    def variable 
     @@varible 
    end 
    end 

# above is the same as 
# def self.variable 
# @@variable 
# end 
end 

TestClass.variable 
#=> "var" 
+0

ありがとうございますが、残念ながら、これはより厳しいエラーを引き起こしました。 –

+0

@VladislavAniskinこれは、クラス変数にアクセスするのが正しい(数少ない)方法であるため、エラーを引き起こすことはできませんでした。 –

+0

@VladislavAniskinあなたは「これがより厳しいエラーを引き起こしました」とどう思いましたか?あなたはそれを試したことがありますか? –

関連する問題