我正在使用Corona SDK。 我想寫接收組件作爲參數,並刪除它像一個功能:如何在Corona中通過引用傳遞變量
function removeComponent(component)
if component then component:removeSelf() end
component = nil
end
那麼,它的工作原理,但使用此功能後,我的參數沒有得到零。可能我必須通過參考來傳遞它,但我不確定Corona是否可能。
我正在使用Corona SDK。 我想寫接收組件作爲參數,並刪除它像一個功能:如何在Corona中通過引用傳遞變量
function removeComponent(component)
if component then component:removeSelf() end
component = nil
end
那麼,它的工作原理,但使用此功能後,我的參數沒有得到零。可能我必須通過參考來傳遞它,但我不確定Corona是否可能。
的Lua不支持通過引用傳遞,但由於它不支持返回值可以隨時實現你想要使用這是什麼慣用做法:
function removeComponent(component)
if component then component:removeSelf() end
return nil
end
然後調用它像這樣:
a = removeComponent(a)
編輯:值得指出過,由於Lua中支持多個返回值和多任務,你從來沒有真正需要傳遞通過引用。如果您需要更新多個項目,請將它們傳回並返回,然後執行以下呼叫: a,b = myFunction(a,b)
這在你的例子中沒有提到。
你究竟想完成什麼?組件是全球性的嗎?或者表中的鑰匙?
在你的例子中,component是函數中局部變量的名稱。您的component = nil
只會從本地變量中刪除該值,因此將會丟失。
如果你想有全球性的影響,你需要通過名的變量你想要消除的字符串:
function removeComponent(component)
if _G[component] then -- exists globally?
_G[component]:removeSelf()
end
_G[component] = nil
end
注意,使用這種編程風格(在這種東西的全球表)通常不是一個好主意。在最好的情況下,它可以讓你感到驚訝,在最糟糕的情況下,你最終將像標準功能那樣的東西打印出來。
因此,我建議puttign東西在自己的表中,並將其傳遞給函數。
它與其他語言沒有什麼不同。通過引用傳遞值(例如,在C++中)不會阻止任何程序在其他地方持有另一個相同值的副本。
我對Corona一無所知,但這並不是一個真正的電暈問題,而是一個Lua風格的問題。但是,如果我寫了它,我會確保'組件'用戶數據或基礎值會自行清除。如果用戶數據被再次訪問,它應該拋出一個錯誤,抱怨重新使用一個死的用戶數據。
我寫了這個代碼:
local component = display.newCircle(100, 100, 100);
local function removeComponent(c)
if component then component:removeSelf() end
component = nil
end
removeComponent(component)
if component == nil then print("Component is nil") else print("Component is not nil") end
而且它打印 「分量是零」。也許你有一些你的組件的副本,或者你可能忘記調用removeComponent或其他東西。需要看到更多的代碼的
您刪除全局「組件」而不是傳遞變量「c」 – Misha
爲一個想法。 – Misha