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のメソッドの引数は何渡しか?」と聞かれたら「オブジェクト渡しです」と答えよう。