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コメント

  • 1000 / 1000