在Corona中的面向对象编程,在类外部访问变量

寻求一些帮助,以访问 Corona OOP 类之外的变量。这是骨架代码:

module(..., package.seeall)

local widget = require "widget"

picker = {}
picker.__index = picker

function picker.new()
local picker_object = {}
setmetatable(picker_object,picker)

picker_object.theHour = 12
picker_object.theMin = 0
picker_object.am = true

return picker_object
end

function picker:getHour()
return self.theHour
end

function picker:getMin()
return self.theMin
end

当我尝试从类外部调用 getHour 和 getMin 时,self 返回为 nil。我应该使用什么语法来返回 myHour 和 myMin 变量? 谢谢!

点赞
用户1440756
用户1440756

我试过了你的代码,没有问题。问题可能出在你访问这个模块的方式上面。这是我的 main.lua,可以与你的代码一起使用(我猜你的文件名为 picker.lua):

local picker = require "picker"
local picker_obj = picker.picker.new()
                -- 第一个 picker 是模块(picker.lua)
                       -- 第二个是文件中的 picker 类
print("minute: " .. picker_obj:getMin())
print("hour: " .. picker_obj:getHour())

另外,命令 module(..., package.seeall) 已经被弃用了,请参见此博客文章以获得更好的制作模块方式。如果你使用这种方法创建你的模块并仍然将你的文件命名为 picker.lua,那么我 main.lua 中的前两行将改为:

local picker = require "picker"
local picker_obj = picker.new()

下面是我将你的代码修改为使用新的模块创建方式的最简单的方式。只有开头和结尾改变了,其他都保持不变:

-- 去掉了 module(),将 picker 设为本地变量
local picker = {}
picker.__index = picker

... -- 所有函数不变

return picker
2012-07-07 22:47:05