あんにんにっき。

日々思ったことや、おこったことを記録するブログ。要するに日記。

参照渡しというか値渡しというか。

 たぶんそう動くのだろうと思いつつ、違ってたりするとあれなので、一応実験してみた。

def setval(val)
    val = 'b'
end

val = 'a'
setval(val)
puts val

 これを動かすと、a が出力される。想定通り。


 配列で渡してみる。

def setval2(val)
    val[0] = 'b'
end

val = ['a']
puts val

setval2(val)
puts val

 これを動かすと、b が出力される。参照先の値を変更し
ているので当たり前。


 こんな感じだとどうなるだろう。

def chgval(val)
    val = val + 'b'
end

val = 'a'
chgval(val)
puts val

 これは、 ab ではなく、 a が出力される。なるほど、新しい文字オブジェクトを作っているっぽい。
 新しい文字オブジェクトを作らないようなメソッド(破壊的、っての)だと渡した側から見ても変わるはず。

def delval(val)
    val.delete!('b')
end

val = 'abc'
delval(val)
puts val

 これだと、bがdeleteされた結果の、 ac が出力される。
 思ってる通りで、違ってなかった事を確認できた。