クイズ1
以下のコードを実行した場合、変数 a
の値はどうなるでしょう?
a=100 b=a b=200
答え
100
解説
a=100
では、変数a
に数値オブジェクト100
を参照させているb=a
では、変数b
に変数a
と同じオブジェクトを参照させている- そして、
b=200
では、変数b
に数値オブジェクト200
を参照させている - この時点で、変数
a
とb
が参照するオブジェクトは異なるものとなる - そして、変数
b
が参照するオブジェクトが変わっても、変数a
が参照するオブジェクトは変わらない
クイズ2
以下のコードを実行した場合、変数 a
の値はどうなるでしょう?
a="aaa" b=a b.gsub!(/a/, "b")
答え
"bbb"
解説
gsub!
はレシーバーの内容を直接書き換えるメソッド(破壊的メソッド)gsub!
は、文字列オブジェクト"aaa"
に対して破壊的に実行されるb=a
では、変数b
に変数a
と同じ文字列オブジェクト"aaa"
を参照させている- そのため、変数
a
からも、変数b
からも書き換えられた文字列"bbb"
を見ることができる
クイズ3
以下のコードを実行した場合、変数 a
の値はどうなるでしょう?
a= ["aaa",100] b=a[1] b= 200
答え
["aaa", 100]
解説
- クイズ1の応用問題
a[1]
は配列の1個目要素を取り出すメソッドb=a[1]
では、変数b
にa[1]
で取り出した、数値オブジェクト100
を参照させている- そして、
b=200
では、変数b
に数値オブジェクト200
を参照させている - この時点で、
a[1]
と変数b
が参照するオブジェクトは異なるものとなる - そして、変数
b
が参照するオブジェクトが変わっても、a[1]
から取得できるオブジェクトは変わらない
クイズ4
以下のコードを実行した場合、変数 a
の値はどうなるでしょう?
a= [ ["aaa","bbb"], 100] b=a[0] b[1] = "ccc"
答え
[["aaa", "ccc"], 100]
解説
- こんどは、
a[0]
とb
は、配列オブジェクト["aaa", "bbb"]
を参照している b[1]
はメソッドArray#[]=
の呼び出しArray#[]=
は、指定された配列の要素の中身を置き換えるメソッドのため、b[1] = "ccc"
ならば["aaa", "ccc"]
となる