1. 程式人生 > >lua 值傳遞,引用傳遞注意事項

lua 值傳遞,引用傳遞注意事項

最近專案中lua編寫居多,lua作為作為遊戲人必備的語言之一,特性就不描述了,在此就發現許多引數傳遞中的坑,特此記錄下

lua中引數傳遞分為兩種 :

            1.值傳遞

                   將值重新拷貝一份賦給新變數,即新變數擁有全新的記憶體地址,與原來的值無關聯,改變新變數不會影響老變數的值

             2.引用傳遞

                 引用傳遞則與值傳遞相反,引用傳遞,每次賦值時,只是將記憶體地址的引用賦值給新變數,新舊變數共同引用同一個                   值,指向同一塊記憶體的值,改變新變數得值,即是改變了記憶體地址中的值,老變數中的值也跟著改變

 在lua中除了table是引用傳遞外,其餘基本都是值傳遞:

例如: 引用傳遞

local temp_table = {
    
    "張三",
    "李四",
    "王五",
    "趙六",
    "錢七",
}


local new_table = temp_table

for i,v in ipairs(temp_table) do
    if v == "王五" then
        table.remove(new_table, i)
    end
end

for i,v in ipairs(temp_table) do
    print(i,v)
end

輸出結果為

1    張三
2    李四
3    趙六
4    錢七
[Finished in 0.6s]

值傳遞

local str = "張三李四王五趙六"

local new_str = str

new_str = string.gsub(new_str,"王五","隔壁老王")

print(str,new_str)

輸出結果 

張三李四王五趙六    張三李四隔壁老王趙六
[Finished in 0.1s]