我正在试图了解如何在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 p;
end
Frank = Person.newPerson("Frank");
Frank:sayHello();
仅供参考,我正在使用Corona SDK,虽然我认为这没有什么区别(除了我认为print()来自哪里)。在任何情况下,杀死我的部分是由print(inName)报告的inName是nil ...因此,myName显然设置为nil所以调用sayHello()失败(尽管如果我硬编码一个值,它们工作正常myName,这让我觉得我正在尝试的基本结构是合理的,但我必须缺少一些简单的东西)。据我所知,它看起来像调用newPerson()时没有设置inName的值,但是我不能为我的生活找出原因;我不明白为什么它不像其他任何函数调用那样。
任何帮助将不胜感激。谢谢!
答案 0 :(得分:11)
请记住:
function Person:newPerson(inName)
等同于:
function Person.newPerson(self, inName)
因此,当你这样做时:
Person.newPerson("Frank");
您正在将一个参数传递给期望 2 的函数。您可能不希望使用newPerson
创建:
。
答案 1 :(得分:9)
尝试
Frank = Person:newPerson("Frank");