参照渡しというか値渡しというか。
たぶんそう動くのだろうと思いつつ、違ってたりするとあれなので、一応実験してみた。
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 が出力される。
思ってる通りで、違ってなかった事を確認できた。