Ruby の変数にいくつか種類があり、スコープや定義方法が異なります。今回は Ruby におけるグローバル変数の使い方について紹介します。
グローバル変数とは
グローバル変数は最も広い範囲のスコープをもつ変数です。また、変数のスコープとはその変数を参照・変更できる範囲のことを表します。
具体的なプログラム例を用いて説明します。
1 2 3 4 5 6 7 |
x = 10 def foo() puts x # NameError: undefined local variable or method `x' end foo() |
上のプログラムでは、 foo というメソッド内で変数 x の値を出力しています。変数 x と foo メソッドの名前空間は異なるので、foo メソッド内からは参照することはできません。しかし、グローバル変数を使用すれば、関数外からでも参照・変更できるようになります。
グローバル変数の使い方
グローバル変数を定義するときは、変数名の前にドルマーク $ を付けます。
1 |
$変数名 = 値 |
変数を参照する際も変数名の前に $ を付けます。
以下はグローバル変数を使用した例です。
1 2 3 4 5 6 7 |
$x = 10 def foo() puts $x # 10 end foo() |
上のプログラムを実行すると foo メソッドが実行されて 10 が表示されます。x をグローバル変数として定義したことでメソッド内からでも参照することができるようになっています。
グローバル変数の一覧を取得する
グローバル変数の一覧を取得する場合は、global_variables メソッドを使用します。 global_variables メソッドは戻り値として定義されているグローバル変数の配列を返します。
1 2 |
$my_global_variable = 10 p global_variables() |
上のプログラムの実行結果は以下のようになります。
1 |
[:$;, :$-F, :$@, :$!, :$SAFE, :$~, :$&, :$`, :$', :$+, :$=, :$KCODE, :$-K, :$,, :$/, :$-0, :$\, :$_, :$stdin, :$stdout, :$stderr, :$>, :$<, :$., :$FILENAME, :$-i, :$*, :$:, :$-I, :$LOAD_PATH, :$", :$LOADED_FEATURES, :$?, :$$, :$VERBOSE, :$-v, :$-w, :$-W, :$DEBUG, :$-d, :$0, :$PROGRAM_NAME, :$-p, :$-l, :$-a, :$binding, :$my_global_variable, :$1, :$2, :$3, :$4, :$5, :$6, :$7, :$8, :$9] |
このとき定義したグローバル変数 $my_global_variable 以外にもいくつかグローバル変数が確認できます。これらは組み込み変数と呼ばれデフォルトで定義されているグローバル変数です。
グローバル変数を使用する上での注意点
変数は同じ名前のものが重複すると、予期せず値が書き換えられてしまう場合があります。そのためスコープが狭いものに比べて広いものは注意して使う必要があります。最も広い範囲のスコープをもつグローバル変数は、できるだけ慎重に使うようにしましょう。