Ruby 変数とスコープ
グローバル変数
$をつけたもの。
どこからでも参照できる、なんでもアリな変数。
一見便利であるが、多用するとどこで値が変わっているかわからないコードになってしまう。
クラス変数
クラス、およびそのクラスのインスタンスすべてで参照できる変数。
上記の例では、Aを継承したBクラスからAのクラス変数を参照している。
これも多用するとソースの見通しが悪くなりそうな感じで、
使用はベースクラスのみにとどめておいたほうが良さそうな感じ。
インスタンス変数
インスタンス毎に別の値を持つ変数。
インスタンスを生成した時点では nil となる。
ローカル変数
メソッド内で使用される通常の変数。
その他に参照専用であるが、擬似変数、というものもある。
とりあえず省略。
$をつけたもの。
どこからでも参照できる、なんでもアリな変数。
一見便利であるが、多用するとどこで値が変わっているかわからないコードになってしまう。
$var = "グローバルhoge"
class A
def hoge
puts $var
end
end
cls = A.new
cls.hoge
# 結果
# グローバルhoge
クラス変数
クラス、およびそのクラスのインスタンスすべてで参照できる変数。
class A
@@ClassHoge = "クラス変数hoge"
def hoge
puts "Aクラスのhoge"
end
end
class B < A
def hoge
puts @@ClassHoge
end
end
cls = B.new
cls.hoge
# 結果
# クラス変数hoge
上記の例では、Aを継承したBクラスからAのクラス変数を参照している。
これも多用するとソースの見通しが悪くなりそうな感じで、
使用はベースクラスのみにとどめておいたほうが良さそうな感じ。
インスタンス変数
インスタンス毎に別の値を持つ変数。
インスタンスを生成した時点では nil となる。
class A
@InstanceHoge = "クラス変数hoge"
def hoge
puts "Aクラスのhoge"
end
end
class B < A
def hoge
puts @InstanceHoge
end
end
class C < A
def hoge
@InstanceHoge = "書き換えたhoge!"
puts @InstanceHoge
end
end
BB = B.new
BB.hoge
CC = C.new
CC.hoge
# 結果
# nil
# 書き換えたhoge!
ローカル変数
メソッド内で使用される通常の変数。
class A
def hoge
foo = "ローカル変数"
puts foo
end
end
cls = A.new
cls.hoge
# 結果
# ローカル変数
# 上記の例で、変数名のみ表記した場合はエラーとなる
その他に参照専用であるが、擬似変数、というものもある。
とりあえず省略。