传递给表中函数的Lua参数为nil

时间:2011-12-22 05:50:17

标签: 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 p;
end

Frank = Person.newPerson("Frank");
Frank:sayHello();

仅供参考,我正在使用Corona SDK,虽然我认为这没有什么区别(除了我认为print()来自哪里)。在任何情况下,杀死我的部分是由print(inName)报告的inName是nil ...因此,myName显然设置为nil所以调用sayHello()失败(尽管如果我硬编码一个值,它们工作正常myName,这让我觉得我正在尝试的基本结构是合理的,但我必须缺少一些简单的东西)。据我所知,它看起来像调用newPerson()时没有设置inName的值,但是我不能为我的生活找出原因;我不明白为什么它不像其他任何函数调用那样。

任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:11)

请记住:

function Person:newPerson(inName)

等同于:

function Person.newPerson(self, inName)

因此,当你这样做时:

Person.newPerson("Frank");

您正在将一个参数传递给期望 2 的函数。您可能不希望使用newPerson创建:

答案 1 :(得分:9)

尝试

Frank = Person:newPerson("Frank");