2017.09 «  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 - - - - » 2017.11
TOP > 定数や変数の実験・その5【クラス変数の実験】

 ← モデルのテーブル名やプライマリキー名を指定する | TOP | 定数や変数の実験・その4【インスタンス変数の実験】

スポンサーサイト 

--年--月--日 (--)
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


【広告】

[--.--.--(--) --:--] スポンサー広告 | Trackback(-) | Comment(-)
↑TOPへ

定数や変数の実験・その5【クラス変数の実験】 

2007年08月30日 ()
シリーズもので Ruby の変数や定数の実験をしています。

1.定数の実験
2.グローバル変数の実験
3.ローカル変数の実験
4.インスタンス変数
5.クラス変数の実験

今回は、5.クラス変数の実験をしてみました。


クラス変数の実験1

class MyClass
  @@hensu = 'hensu_data_in_class'
  def method1
    p @@hensu
  end
  def method2
    @@hensu = 'hensu_data_in_method2'
    p @@hensu
  end
end

class MyChildClass < MyClass
  def child_method1
    p @@hensu
  end
  def child_method2
    @@hensu = 'hensu_data_in_child_method2'
    p @@hensu
  end
end

my_instance = MyClass.new
my_child_instance = MyChildClass.new

my_instance.method1 # -> "hensu_data_in_class"
my_child_instance.child_method1 # -> "hensu_data_in_class" ※注:親のクラス変数を子が共有

my_child_instance.child_method2 # -> "hensu_data_in_child_method2"
my_instance.method1 # -> "hensu_data_in_child_method2" ※注:子が書き換えたクラス変数を親が共有

my_instance.method2 # -> "hensu_data_in_method2"
my_child_instance.child_method1 # -> "hensu_data_in_method2" ※注:親が書き換えたクラス変数を子が共有




クラス変数の実験2

class MyClass
  @@hensu = 'hensu_data_in_class'
  def method1
    p @@hensu
  end
  def method2
    @@hensu = 'hensu_data_in_method2'
    p @@hensu
  end
end

class MyClass2
  @@hensu = 'hensu_data2_in_class'
  def method1
    p @@hensu
  end
end

my_instance = MyClass.new
my_instance2 = MyClass2.new

my_instance.method1 # -> "hensu_data_in_class"
my_instance.method2 # -> "hensu_data_in_method2"
my_instance.method1 # -> "hensu_data_in_method2" ※注:クラス内でクラス変数を共有する

my_instance2.method1 # -> "hensu_data2_in_class" ※注:my_instance とクラス変数を共有しない




クラス変数の実験3

@@hensu = 'hensu_data' # クラス定義の外でクラス変数を使うと、グローバル変数っぽくなってしまう

class MyClass
  @@hensu = 'hensu_data_in_class'
  def method1
    p @@hensu
    @@hensu = 'hensu_data_in_method1'
    p @@hensu
  end
end

class MyClass2
  @@hensu = 'hensu_data2_in_class'
  def method1
    p @@hensu
    @@hensu = 'hensu_data2_in_method1'
    p @@hensu
  end
end

p @@hensu # -> "hensu_data2_in_class" ※注:もうこの時点で @@hensu クラス変数は、グローバル変数っぽい動きをする。

my_instance = MyClass.new
my_instance2 = MyClass2.new

p @@hensu # -> "hensu_data2_in_class"

my_instance.method1 # -> "hensu_data2_in_class", "hensu_data_in_method1"

my_instance2.method1 # -> "hensu_data_in_method1", "hensu_data2_in_method1"

p @@hensu # -> "hensu_data2_in_method1"




Ruby の変数や定数の命名規則は、こちらからどうぞ。

【広告】

[2007.08.30(Thu) 23:45] Rubyの文法Trackback(0) | Comments(0)
↑TOPへ

 ← モデルのテーブル名やプライマリキー名を指定する | TOP | 定数や変数の実験・その4【インスタンス変数の実験】

COMMENT

COMMENT POST















管理者にだけ表示

 ← モデルのテーブル名やプライマリキー名を指定する | TOP | 定数や変数の実験・その4【インスタンス変数の実験】
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。