2011-05-20 56 views
0

我想知道是否有方法來指定是否應複製或引用lua函數的參數。顏色是表示顏色的對象。指定一個lua參數應該是一個副本或參考

例如,對於這個代碼

function editColor(col) 
    col.r = 0 
    print(tostring(col.r)) 
end 

color = Color(255, 0, 0) 
print(tostring(color.r)) 
editColor(color) 
print(tostring(color.r)) 

使輸出

255 
0 
0 

所以COL是一個 「參考」 色,但這樣的代碼:

function editColor(col) 
    col = Color(0, 0, 0) 
    print(tostring(col.r)) 
end 

color = Color(255, 0, 0) 
print(tostring(color.r)) 
editColor(color) 
print(tostring(color.r)) 

使此輸出

255 
0 
255 

所以這裏的顏色被複制。

有沒有辦法強制參數被複制或引用?就像C++中的&運算符一樣?

+0

這可能有助於封閉:http://stackoverflow.com/questions/640642/how-do-you-copy-a-lua-table-by-value – Alex 2011-05-20 23:45:56

回答

3

不,參數在Lua中總是通過by value。但是,所有變量都是references。在editColor的第二個例子中,你重寫了變量col指向的內容,但僅限於該範圍。你需要改變一下,也許不是傳入一個變量來重新分配,讓函數返回一些東西,然後在外面重新分配。祝你好運。

0

,你可以使用這樣

function colorClosure() 

    local col 
    function editColor() 
     col = Color(0, 0, 0) 
     print(tostring(col.r)) 
    end 

    color = Color(255, 0, 0) 
    print(tostring(color.r)) 
    editColor(color) 
    print(tostring(color.r)) 
end