传递给表中函数的Lua参数为零
我正试图弄清楚在Lua中OOP是如何实现的,我想我有一个简单的方法来实现它,但它不起作用,我只是不明白原因。以下是我正在尝试的:传递给表中函数的Lua参数为零,lua,Lua,我正试图弄清楚在Lua中OOP是如何实现的,我想我有一个简单的方法来实现它,但它不起作用,我只是不明白原因。以下是我正在尝试的: Person = { }; function Person:newPerson(inName) print(inName); p = { }; p.myName = inName; function p:sayHello() print ("Hello, my name is " .. self.myName); end return
Person = { };
function Person:newPerson(inName)
print(inName);
p = { };
p.myName = inName;
function p:sayHello()
print ("Hello, my name is " .. self.myName);
end
return p;
end
Frank = Person.newPerson("Frank");
Frank:sayHello();
仅供参考,我正在使用Corona SDK,尽管我假设这不会有什么不同(我相信这就是print()的来源)。在任何情况下,杀死我的部分是inName是零,正如print(inName)报道的那样。。。因此,myName显然被设置为nil,因此对sayHello()的调用失败(尽管如果我硬编码myName的值,它们工作得很好,这让我认为我尝试的基本结构是合理的,但我必须缺少一些简单的东西)。就我所知,在调用newPerson()时,inName的值似乎没有被设置,但我一辈子都不知道为什么;我不明白为什么它不像其他函数调用
任何帮助都将不胜感激。谢谢 试试看
Frank = Person:newPerson("Frank");
请记住:
function Person:newPerson(inName)
相当于:
function Person.newPerson(self, inName)
因此,当您这样做时:
Person.newPerson("Frank");
您正在将一个参数传递给一个需要两个参数的函数。你可能不想用
来创建新人
:
我希望我能接受你和尼科尔的答案都是正确的,你们两人的答案都完全正确。。。我把它给你只是因为你先回答:)但是谢谢你尼科尔也解释了它。。。正如我所预料的,这是一件我完全忘记的愚蠢的事情,甚至不是我不知道的事情。再次感谢你,一切都正常运转,我现在希望如此:)@scholli:试着在stackoverflow论坛上解释你的答案。