変数には値が含まれていません。値を参照します。あなたが書くとき:
foo = 2
bar = [foo]
foo = 4
…なることはありませbar
ん[4]
。〜何が起こるか:
2
メモリに値を作成し、foo
それを参照するように変数を設定します。
foo
最初のスロットが(ie )によって参照される値を参照する新しい配列を作成し、その配列を参照するよう2
に変数bar
を設定します。
- メモリに値を作成し、代わりにそれを参照するように
4
変数を変更します。foo
変更可能な一部のオブジェクトタイプ。たとえば、文字列または配列の実際の内容を変更して異なるものにすることができます。この場合、その値へのすべての参照は変更を反映しています。
foo = "hello"
bar = [foo]
foo[0] = "j"
p bar #=> ["jello"]
ただし、数値は変更できません。変更できる数値よりも「ハンドル」を使用し、その数値への他のすべての参照を変更する場合は、数値を可変データ型でラップする必要があります。例えば:
$var1 = [2]
keywords = { "one"=>$var1 }
p keywords["one"][0] #=> 2
$var1[0] = 4
p keywords["one"][0] #=> 4
ここで、値が数値ではなく文字列である場合(「キーワード」が意味するように)、それらを変更して完全に置き換えることができます。
$var1 = "foo"
keywords = { "one"=>$var1 }
$var1.replace( "bar" )
p keywords["one"] #=> "bar"
重要なのは、オブジェクト自体でメソッドを呼び出す必要があることです(そして、そのメソッドは、新しいオブジェクトを返すのではなく、オブジェクト自体を変更する必要があります)。変数代入を使用してこれを機能させることはできません。たとえば、を参照してくださいString#replace
。