読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

今日気づいた勘違い

Rubyのクラス変数ってクラスとそのサブクラスでも共有されるんですね・・・

# 親クラス
class Parent
  # クラス変数
  @@class_var = "parent"
  def class_var
    @@class_var
  end
end

# 派生クラス1
class SubClass < Parent
  @@class_var = "child"
end
# 派生クラス2
class SubClass2 < Parent
  @@class_var = "child2"
end

p Parent.new.class_var
p SubClass.new.class_var
p SubClass2.new.class_var

実行結果です。

child2
child2
child2

ずっとJavaのstatic変数と同じと思っていた・・・。Javaのstatic変数に近いのは、「クラスオブジェクトのインスタンス変数」ですね。

#親クラス
class Parent
  #クラスのインスタンス変数
  @class_var = "parent"
  def self.class_var
    @class_var
  end
end
# 派生クラス1
class SubClass < Parent
  @class_var = "child"
  def self.class_var
    @class_var
  end
end
# 派生クラス2
class SubClass2 < Parent
  @class_var = "child2"
  def self.class_var
    @class_var
  end
end

puts Parent.class_var
puts SubClass.class_var
puts SubClass2.class_var

実行結果です。

parent
child
child2

orz.