簡體   English   中英

元表,嘗試調用方法“重命名”(nil值)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM