Rubyは参照渡しか値渡しか?
「http://blog.udzura.jp/2011/07/30/what-i-thought-when-i-start-ruby/」を見て、「Rubyは参照渡しか値渡しか?」という議論があるらしいことを知る。id:iox:20070203:1170506166 とか。
そもそも、そういうのは、変数に値の入る言語での区別の話で、変数には原則として参照が入るRubyでは、区別が無意味だと思う。
後者のブログで引用されている、
rubyには変数の参照というものがないので
というのは、それはそう。Rubyでの変数はオブジェクトにつけた名札なので、名札は呼び出した先のメソッドには渡らないということだね。
def foo(bar) bar="bar" end baz="baz" foo(baz) p baz #=> "baz"
ということを以て、「Rubyは値渡し」というのは、言葉を定義しなおしている感がある。つまり、「実際にわたっているのは何か」で定義するのではなく、「仮引数に代入したときに実引数の変数の内容が変更されるか」で、参照渡しと値渡しという言葉を定義しなおしている。
「Rubyのメソッドの引数は何渡しか?」と聞かれたら「オブジェクト渡しです」と答えよう。