[英]Metatables, attempt to call method 'rename' (a nil value)
這是我第一次使用元表,我在Lua演示中做了一個簡單的腳本進行測試,但是它總是給我“試圖調用方法'rename'(nil值)”,為什么?
peds = {}
function peds.new ( name )
local tb = { name = name }
setmetatable ( tb, { __index = peds } )
return tb
end
function peds.rename ( name )
self.name = name
return self.name == name
end
local ped = peds.new ( "max" )
ped:rename ( "randomname" )
您的代碼中有兩個(可能)問題,具體取決於您如何進行設置。
如果您只是在REPL中鍵入上述內容,那么當您聲明local ped = ...
它將立即超出范圍並變得不可訪問。 因此,表達式ped:rename無效,盡管它應報告“ ped is nil”而不是“ rename is nil”。
如果將以上內容保存到腳本中並使用load_file或其他內容加載,您仍然會遇到問題,因為此函數簽名不正確:
function peds.rename ( name )
應該:
function peds.rename ( self, name )
類似於它在C ++中的工作方式,在lua中,當您創建對象方法時,必須首先采用隱藏的self
參數,並且當您調用ped:rename( "random name" )
,這只是ped.rename(ped, "random_name")
。 如果self參數不存在,那么它將不起作用,或者甚至會因為簽名不匹配而說“找不到函數/重命名為nil”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.