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

Fra*_*tti 6 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();
Run Code Online (Sandbox Code Playgroud)

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

任何帮助,将不胜感激.谢谢!

Nic*_*las 11

记住这个:

function Person:newPerson(inName)
Run Code Online (Sandbox Code Playgroud)

相当于:

function Person.newPerson(self, inName)
Run Code Online (Sandbox Code Playgroud)

因此,当你这样做:

Person.newPerson("Frank");
Run Code Online (Sandbox Code Playgroud)

您正在将一个参数传递给期望两个的函数.您可能不希望newPerson创建:.


Oli*_*ver 9

尝试

Frank = Person:newPerson("Frank");
Run Code Online (Sandbox Code Playgroud)

  • @ Schollii:尝试在stackoverflow论坛中解释您的答案. (4认同)