Ruby クラス変数、クラスインスタンス変数、 インスタンス変数の違い
違いを一言で表現するとスコープの範囲の違い
クラス変数
各インスタンスが共有する変数のこと。
書き方:@@x
範囲:クラス内にあるメソッドから呼べる
:継承クラスのメソッドから呼べる
クラスインスタンス変数
そのクラスのみでしか参照できない変数のこと。例えば、そのクラスを継承したクラスではその変数にはアクセスできない。
書き方:@x
範囲:クラス内にあるメソッドから呼べる
インスタンス変数
インスタンスごとに持つ変数のこと。
書き方:@x
範囲:クラス内にある、そのメソッドのみから呼べる
したいこと
xクラスのAメソッドとBメソッド内で、インスタンス変数を使用したい場合
解決
クラス変数を使用するか、xクラスにinitializeメソッドを定義する必要がある
------------------------
# クラス変数
class Car
@@num = 0
def add_weight
@@num += 1
puts @@num
end
end
------------------------
# initializeメソッドを定義
class Car
def initialize
@num = 0
end
def add_weight
@@num += 1
puts @@num
end
end
------------------------
<参考URL>
http://d.hatena.ne.jp/mirichi/20140206/p1
https://teratail.com/questions/51652
0コメント