【问题标题】:OOP in Corona, accessing vars from outside classCorona 中的 OOP,从外部类访问变量
【发布时间】:2017-01-07 17:29:06
【问题描述】:

寻求有关从 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 的形式返回。我应该使用什么语法来返回我的 theHour 和 theMin 变量? 谢谢!!

【问题讨论】:

    标签: oop lua coronasdk


    【解决方案1】:

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

    local picker = require "picker"
    local picker_obj = picker.picker.new() 
                    -- the first picker is the module (picker.lua)
                           -- the second is the picker class in the file
    print("minute: " .. picker_obj:getMin())
    print("hour: " .. picker_obj:getHour())
    

    此外,module(..., package.seeall) 命令已被弃用,请参阅this blog post for a better way to make your module. 如果您使用此方法创建模块并仍然调用您的文件 picker.lua,我的 main 中的前两行.lua 将更改为:

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

    这是我修改代码以使用创建模块的新方法的最简单方法。只有开头和结尾变了,其他都一样:

    -- got rid of module(), made picker local
    local picker = {}
    picker.__index = picker
    
    ... -- all the functions stay the same
    
    return picker
    

    【讨论】:

    • 感谢您的回答白兰度!有趣的。啊,弃用!我刚刚更新到新版本的 Corona,花了半个小时浏览我的应用程序,取出小部件 .view 的东西并修复了类似的错误!我有点不清楚如何更改我的课程以适应新方法 - 我不再需要 picker.__index = picker 了吗? picker_object 呢?我juuuuust得到了一切工作,我很害怕我会打破它! :)
    • 对于 OOP,您仍然需要 picker.__index = picker 和 picker_object。我更新了答案以显示如何将新方法用于模块。您可以更改您的功能,使其更像博客文章中描述的那样,但您不必这样做。您所拥有的将起作用,只需确保您添加的任何私有函数都是本地而不是类成员,因此:local function foo()
    猜你喜欢
    • 2017-01-31
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    相关资源
    最近更新 更多