2015年1月9日金曜日

【Ruby】クラスインスタンス変数という罠

 @var は インスタンス変数、 @@var はクラス変数というのはrubyの基礎だが、 @var をクラスメソッドのスコープ内で定義した場合はクラスインスタンス変数というらしい。インスタンス変数のつもりで使うと、スコープはクラス変数にちかく予期せぬ動きになってはまる。継承したクラスからはアクセスできないので 他の言語のprivateに近いか。



# coding:utf-8

class Test

def self.set v
@var = v
end

def self.get
@var
end

end

Test.set("first desu.")
Test.set("second desu.")

p Test.get
p Test.get



実行結果


$ ruby /tmp/test.rb
"second desu."
"second desu."


 間違えやすいわりに、使いどころが不明だ。

0 件のコメント:

コメントを投稿