lua 值傳遞,引用傳遞注意事項
最近專案中lua編寫居多,lua作為作為遊戲人必備的語言之一,特性就不描述了,在此就發現許多引數傳遞中的坑,特此記錄下
lua中引數傳遞分為兩種 :
1.值傳遞
將值重新拷貝一份賦給新變數,即新變數擁有全新的記憶體地址,與原來的值無關聯,改變新變數不會影響老變數的值
2.引用傳遞
引用傳遞則與值傳遞相反,引用傳遞,每次賦值時,只是將記憶體地址的引用賦值給新變數,新舊變數共同引用同一個 值,指向同一塊記憶體的值,改變新變數得值,即是改變了記憶體地址中的值,老變數中的值也跟著改變
在lua中除了table是引用傳遞外,其餘基本都是值傳遞:
例如: 引用傳遞
local temp_table = {
"張三",
"李四",
"王五",
"趙六",
"錢七",
}
local new_table = temp_tablefor i,v in ipairs(temp_table) do
if v == "王五" then
table.remove(new_table, i)
end
endfor 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]