他の変数を代入
変数にはオブジェクトだけではなく、他の変数を代入することも可能です。次の例を見てください。
pref1 = "東京" pref2 = pref1
上記ではまず変数「pref1」に文字列の「東京」を代入しています。次に変数「pref2」に変数「pref1」を代入しています。この結果、変数「pref2」は変数「pref1」が指し示していた「東京」と言う文字列オブジェクトを指し示すことになります。
変数はあくまでオブジェクトに対する名札ですので、変数「pref2」を新たに「東京」と言う文字列オブジェクトの名札にした場合でも「東京」と言う文字列オブジェクトは1つのままです。つまり1つのオブジェクトに2つの名札が付いている状態です。
この時、「東京」と言う文字列オブジェクトそのものに修正を加えると、変数「pref1」及び変数「pref2」が指し示すオブジェクトはどちらも変更されることになります。
str1 = "Tokyo" str2 = str1 str1 << ",Japan" print(str1) print(str2)
上記の場合、どちらの「print」メソッドも「Tokyo,Japan」を出力します。(「<<」メソッドについては「文字列オブジェクトに文字列を追加する」を参照して下さい)。
なお2つの変数が同じオブジェクトを指し示した後で、どちらかのオブジェクトに新しいオブジェクトを代入した場合は、代入された変数が指し示すオブジェクトだけが変更されるだけです。
str1 = "Tokyo" str2 = str1 str1 = "Osaka" print(str1) print(str2)
上記の場合、変数「str1」は「Osaka」を出力しますし、変数「str2」は「Tokyo」を出力します。
サンプルプログラム
では簡単なプログラムで確認して見ます。
#! ruby -Ku require "kconv" val1 = "Tokyo" print("val1 = " + val1 + "¥n") val2 = val1 print("val2 = " + val2 + "¥n") val1 << ",Japan" print("val1 = " + val1 + "¥n") print("val2 = " + val2 + "¥n") val1 = "東京" print(Kconv.tosjis("val1 = " + val1 + "¥n")) val2 = val1 print(Kconv.tosjis("val2 = " + val2 + "¥n")) val1 = "大阪" print(Kconv.tosjis("val1 = " + val1 + "¥n")) print(Kconv.tosjis("val2 = " + val2 + "¥n"))
上記のプログラムを「test4-1.rb」として保存します。文字コードはUTF-8です。そして下記のように実行して下さい。
( Written by Tatsuo Ikura )