2012-03-19 14 views
0

バリアント関数内の配列のコレクションを変更しようとしています。私は配列に追加しようとするとコピーに取り組むことになり、呼び出し後に失われます。 Luaでrefで値を渡す方法はありますか?luaは関数内の配列を変更します

function myfunc(...) 
local args = {...} 
--do work on args-- 
end 

"do work"は実際には何もしませんが、機能の外で動作します。

もちろん、私は、配列の配列を渡すことなく使用して...それはちょっとLuaのでは...

答えて

2

を使用しての目的に反し、あなただけの参照によって変数を渡すことを選択するかをすることはできませんでした。基本型は決して参照で渡されることはありません(数字やブール値など)。他のものは常に参照によって渡されます(テーブル、ユーザーデータ、文字列など)。文字列の場合、これは大したことではありません。地元の人々からグローバルにこれだけの作品は、テーブル内に保持されていないことを

a=2 
b=3 
function myfunc(...) 
    local args={...} 
    for k,v in pairs(args) do 
     _G[v]=_G[v]+k 
    end 
end 
myfunc('a') 
print(a) -- 3 
myfunc('a','b') 
print(a,b) -- 4 5 

注:

だからどちらかのあなたは、このような文字列としてグローバルに仕事をしたい、あなたの引数を渡します。テーブルでの作業

は物事のこの種はあまり痛みを伴う可能:

function myfunc(t) 
    for k,v in pairs(t) do 
      t[k]=v+k 
    end 
end 
tab1={a=2} 
myfunc(tab1) 
print(tab1.a) -- 3 
tab2={a=2,b=3} 
myfunc(tab2) 
print(tab2.a,tab2.b) -- 3 5 
0

1 varibleに...グループ化された全パラメータリストを使用する目的を。これは、パラメータの参照または値による性質とはほとんど関係がありません。

ルアのすべての自然型は、唯一の例外であるテーブルを使用して値渡しされます。

最も簡単な方法は、配列の配列を渡すことです。 2つの余分な文字があまりにも多くのタイピングのように見える場合は、あなたの代わりに括弧を削除することができることを知っている:

foo({a,b,c}) 
foo{a,b,c} -- equivalent 
+1

を 'テーブルのみexception.'技術的であることで、テーブルの値が* *その参照です。表の*内容*は、表の値とは別です。 –

関連する問題