我的课有问题 . 我得到以下错误:尝试索引本地'self'(零值)当我调用下面的类的getter方法时 . Item.lua文件:
require "classlib"
Item = class("Item")
function Item:__init()
self.interval = 1
end
function Item:getInterval()
return self.interval
end
我正在调用这个getter函数:
dofile("../src/item.lua")
item = Item()
function test_item()
assert_equal(1, item.getInterval())
end
这有什么问题?
亲切的问候...
3 回答
通常,您应该通过
:
调用成员函数 .在Lua中,冒号(
:
)表示函数的调用,提供self
作为第一个参数 .从而
大致等于
如果未在
A.foo()
中指定A,则函数体将尝试引用self
参数,该参数既未明确也未隐式填充 .请注意,如果从成员函数内部调用它,
self
将已经可用:所有这些信息都可以在任何好的Lua书/教程中找到 .
obj:方法只是语法糖:
定义:
function obj:method(alpha)等价于obj.method(self,alpha)
执行:
obj:method(“somevalue”)相当于obj.method(obj,“somevalue”)问候
更改:
至:
在Lua中,错误报告有些荒谬 . 从类的角度来看,
.getInterval()
方法应使用self
参数调用,而:getInterval()
方法隐式包含self
参数 . 并且语法错误应该在被调用点中标记,而不是getInterval()
的definition-body .传统上,当你错误地调用一个方法时,它不是方法的错,而是调用者 .