Lua类成员函数互相调用

我有一个Lua类:

-- 文件:myClass.lua
local myClass = {}
myClass.__index = myClass

setmetatable(myClass, {
    __call = function (cls, ...)
        return cls.new(...)
    end,
})

function myClass.new(init_size)
    local self = setmetatable({}, myClass)
    self.max_size = init_size
    return self
end

function myClass:set_max_size(x)
    self.max_size = x
    print(myClass:get_max_size()) -- <= [1]
end

function myClass:get_max_size()
    return self.max_size
end

return myClass

在终端中,执行以下命令后,输出结果并不是我期望的。

> myClass = require 'myClass'
> myClassObj = myClass(5)
> myClassObj:set_max_size(10) ---<= 这一行将打印nil而不是我期望的10。

有什么想法吗?

点赞
用户1728830
用户1728830

由于max_size不是一个类变量而是一个实例的属性(或者在Lua的语境下你可能会使用其他术语),因此你需要使用

self:get_max_size()

而不是

myClass:get_max_size()
2016-06-17 08:26:49