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