lua-リファレンス転送と値転送
function test1(tt)
tt = {1, 3, 5}
end
function test2(tt)
tt[1] = 2
tt["a"] = "hello"
end
t = {4, 5, 6}
test1(t)
for k,v in pairs(t) do
print(v)
end
print("------")
t = {4, 5, 6}
test2(t)
for k,v in pairs(t) do
print(v)
end
luaにおけるtableの参照伝達は、そのtableオブジェクトの内部要素を修正することのみであり、tableオブジェクトのコピー操作では、参照伝達の効果は得られない.
値伝達とは、実はコピー伝達であり、関数呼び出し時に関数スタックで実パラメータの値を形パラメータにコピーするので、形パラメータの修正はもちろん実パラメータに影響しません.
関数の内部修正を行うには、外部で表示される方法の1つは、ここのtableの内部要素のようにアドレスを渡すことであり、もう1つは参照を渡すことであり、参照伝達にはcの&参照伝達記号のような言語レベルのサポートが必要であり、この変数がコピー伝達ではなく、パラメータが実パラメータの別名であることを示す.(実は下層の実装にはポインタが使われています)