Lua和面向对象编程,如何从一个方法中访问另一个方法?

所以,如果我有一个对象并且需要在该对象中的一个方法中调用另一个方法,我该如何构造该调用?

TestObject = {}
TestObject.__index = TestObject

function TestObject.new()
    local self = setmetatable({}, TestObject)
    self.value = init
    -- 一个计数器[整数],不重要
    self.counter = 99
    return self
end

function TestObject:getCount()
    return self.counter
end

function TestObject:getCountPlus(add_value)
    -- 在这里应该如何格式化?
    return self.getCount() + add_value
end

使用此对象将类似于:

local testObject = TestObject.new()
testObject:getCountPlus(1)

这将导致结果为100。

点赞
用户869951
用户869951

getCount() 方法需要知道它所在的实例。当你编写:

function TestObject:getCount()

实际上与编写

function TestObject.getCount(self)

是一样的(注意冒号变成了点)。 因此,调用 self.getCount() 就像使用 self=nil 调用 getCount。使用 self:getCount(),它与 self.getCount(self) 是一样的。 这似乎很奇怪:为什么解释器不自动提供 self?这仅仅是这门语言的设计方式:它只提供 : 符号的自动 self。

2014-03-04 17:50:03