Lua函数中传递的表格参数为nil。

8

我想了解Lua中面向对象编程的实现方式,本以为有一个简单的方法来实现,但它并没有成功,我无法找出原因。以下是我的尝试:

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();

FYI,我正在使用Corona SDK工作,虽然我认为这没有什么区别(除了print()函数是从那里来的)。无论如何,让我痛苦不已的是,根据print(inName)的报告,inName是nil... 因此,myName显然设置为nil,因此调用sayHello()函数失败(尽管如果我为myName硬编码一个值,则它们可以正常工作,这使我认为我尝试的基本结构是正确的,但我必须遗漏了一些简单的东西)。就我所知,当调用newPerson()时,inName的值似乎没有被设置,但我却想不出为什么;我不明白它为什么不像任何其他函数调用一样。
任何帮助都将不胜感激。 谢谢!
2个回答

11

记住这一点:

function Person:newPerson(inName)

等同于这个:

function Person.newPerson(self, inName)

因此,当您执行以下操作时:

Person.newPerson("Frank");
你正在向一个期望接收两个参数的函数传递一个参数。你可能不想使用":"创建一个名为"newPerson"的对象。

10

尝试

Frank = Person:newPerson("Frank");

我希望我能接受你和Nicol的答案都作为正确的,你们两个都完全正确... 我只是因为你先回答了 :) 所以我把它给了你。但是谢谢Nicol也解释了一下...正如我所预料的那样,这只是一些愚蠢的事情,我完全忘记了,甚至不是我不知道的东西。再次感谢,现在一切都按照我的意愿正常工作 :) - Frank W. Zammetti
4
@Schollii:请尽量在Stack Overflow论坛中解释您的答案。 - karthik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接