| 変数 | 名前の付け方 | 例 | スコープ |
| ローカル変数 | 小文字で始める | abc, foo | メソッド内で有効 |
| インスタンス変数 | @で始める | @abc, @foo | 呼び出したインスタンスの中で有効 |
| クラス変数 | @@で始める | @@abc, @@foo | クラスの中で有効。クラス が同じなら、 |
| インスタンスが異なっても有効 | |||
| グローバル変数 | $で始める | $abc, $foo | プログラム全体で有効 |
| 定数 | 大文字で始める | Abc, Foo | クラス変数と同じ |
------------ program ------------
n = 10
def var1(k)
for n in 0..k do
printf("for文中の n の値は %d \n",n)
end
printf("defの(forの外)の n の値は %d \n",n)
end
var1(5)
printf("defの外の n の値は %d \n",n)
------------ end ----------------
実行結果は、以下のとおり、。
$ ruby var_local1.rb
for文中の n の値は 0
for文中の n の値は 1
for文中の n の値は 2
for文中の n の値は 3
for文中の n の値は 4
for文中の n の値は 5
defの(forの外)の n の値は 5
defの外の n の値は 10
同じ ``n''でも位置によって異なる。
メソッドの外には影響を与えない。
------------ program ------------
class Variable
def var_1
a = 10
@b = a + 10
printf(" var_1 の中の a = %d \n", a)
end
def var_2
a = 20
printf(" var_2 の中の a = %d \n", a )
printf(" var_2 の中の @b = %d \n", @b)
end
end
c1 = Variable.new # c1を"Variable" クラスとして定義。
# これにより"c1"インスタンスが生成される。
c2 = Variable.new # c2を"Variable" クラスとして定義。
# これにより"c2"インスタンスが生成される。
c1.var_1 # "c1" インスタンスの "var_1" が実行される。
c1.var_2 # "c1" インスタンスの "var_2" が実行される。
c2.var_2 # "c2" インスタンスの "var_2" が実行される。
------------ end ----------------
実行結果は、以下のとおり。
$ ruby var_instans1.rb
var_1 の中の a = 10
var_2 の中の a = 20
var_2 の中の @b = 20
var_2 の中の a = 20
var_2 の中の @b = 0
c1もc2も同じクラスに属しているが、インスタンスは異なる。
すなわち ``c1''の中で使われているインスタンス変数は ``c1''の中で全て同じ
変数として扱われる。
となる。 同様に ``c2''の中で使われているインスタンス変数は ``c2'' の中で
同じ変数として扱われることとなる。
------------ program ------------
class Variable
def var_1
a = 10
@@b = a + 10 # 前とはこの部分が異なる。
printf(" var_1 の中の a = %d \n", a)
end
def var_2
a = 20
printf(" var_2 の中の a = %d \n", a )
printf(" var_2 の中の @@b = %d \n", @@b) # 前とはこの部分が異なる。
end
end
c1 = Variable.new # c1を"Variable" クラスとして定義。
# これにより"c1"インスタンスが生成される。
c2 = Variable.new # c2を"Variable" クラスとして定義。
# これにより"c2"インスタンスが生成される。
c1.var_1 # "c1" インスタンスの "var_1" が実行される。
c1.var_2 # "c1" インスタンスの "var_2" が実行される。
c2.var_2 # "c2" インスタンスの "var_2" が実行される。
------------ end ----------------
実行結果は、以下のとおり。
$ ruby var_class1.rb
var_1 の中の a = 10
var_2 の中の a = 20
var_2 の中の @@b = 20
var_2 の中の a = 20
var_2 の中の @@b = 20
最後の値が異なる。
``c1.var_1'' で、クラス変数が変化したので、異なるインスタンスである
``c2.var_2''の変数も変化したからである。