1. Rubyの関数引数の影響範囲について
Rubyの関数はC言語における参照渡しと値渡しの特性を併せ持つ。
1.1. 値渡し的特性
def function(a)
a = 10
puts a
end
a = 3
puts a
function(a)
puts a
上記のコードを実行した場合、以下のような結果となる。
3
10
3
関数内での代入はなかったことになる。
1.2. 参照渡し的特性
def function(a)
a << 4
p a
end
a = [1,2,3]
p a
function(a)
p a
上記のコードを実行した場合、以下のような結果となる。
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3, 4]
配列への挿入は関数外にも反映される。
2. C言語のポインタの考えでのRubyの関数引数の解釈
Rubyの関数内では以下のことが言える。
ポインタは変更できない
関数内では変数のポインタを変更することができるが、
関数外にその変更を持ち出すことはできないということである。
2.1. 値渡し的特性について
関数内での値代入、つまり代入される値へのポインタの入れ替えが関数外ではなかったことになる。
2.2. 参照渡し的特性について
関数内で行われているのは配列への値の挿入である。
つまり、変数のポインタを変更するわけではなく、
そのポインタからint型4つ分ズレた位置のポインタに値を代入する。
よって関数外にも関数内での処理が反映される。