gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:41:34 25 4
gpt4 key购买 nike

我刚开始在 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。谁能告诉我这种奇怪行为的原因是什么,或者我在这里做错了什么?

最佳答案

变量默认是全局的,所以ObjectA:newObjectB:new中的两个变量newInstance是同一个全局变量,你给它一个新的值,之前的值就没有了。

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

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

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

关于oop - 函数在构造函数内部调用时返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24038465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com