在构造函数内部调用时,函数返回nil

时间:2014-06-04 13:13:50

标签: oop lua

我刚刚开始使用lua编程,我在本教程后创建了一些oop结构:http://tylerneylon.com/a/learn-lua/

问题是,当我创建返回对象或对象表的函数并在构造函数中调用它时,它返回nil。

这是第一个对象的代码:

require "ObjectB"

ObjectA = {}

function ObjectA:new(num)
    newInstance = {}

    newInstance.var = self:foo(num)

    self.__index = self
    return setmetatable(newInstance, self)
end

function ObjectA:foo(num)
    return ObjectB:new(num)
end

,第二个对象:

ObjectB = {}

function ObjectB:new(num)
    newInstance = {}

    newInstance.num = num

    self.__index = self
    return setmetatable(newInstance, self)
end

当我这样做时:

myObject = ObjectA:new(5)
print(myObject.var.num)

,我收到错误:“错误:main.lua:14:尝试索引字段'var'(零值)”。 但是当我这样做时:

myObject = ObjectA:new(5)
myObject.var = ObjectA:foo(5) //setting var by calling foo outside of constructor
print(myObject.var.num)

,一切似乎都很好,打印结果真的是5.有人能告诉我这种奇怪行为的原因是什么,或者我在这里做错了什么?

1 个答案:

答案 0 :(得分:4)

默认情况下,变量是全局变量,因此newInstanceObjectA:new中的两个变量ObjectB:new是相同的全局变量,您为其分配一个新值,之前的值已消失。

相反,使用这样的局部变量:

function ObjectA:new(num)
    local newInstance = {}
    --the rest
end

function ObjectB:new(num)
    local newInstance = {}
    --the rest
end