【问题标题】:Lua arguments passed to function in table are nil传递给表中函数的 Lua 参数为零
【发布时间】:2012-01-25 20:38:38
【问题描述】:

我正在尝试了解如何在 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 的值,但我终其一生都无法弄清楚原因;我不明白为什么它不像任何其他函数调用。

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

【问题讨论】:

    标签: lua


    【解决方案1】:

    记住这一点:

    function Person:newPerson(inName)
    

    相当于这个:

    function Person.newPerson(self, inName)
    

    因此,当你这样做时:

    Person.newPerson("Frank");
    

    您将一个参数传递给需要 两个 的函数。您可能不希望使用: 创建newPerson

    【讨论】:

      【解决方案2】:

      试试

      Frank = Person:newPerson("Frank");
      

      【讨论】:

      • 我希望我能接受你和 Nicol 的答案都是正确的,你们都完全正确......我把它给你只是因为你先回答:) 但是谢谢 Nicol 的解释它也是......正如我所料,这是我完全忘记的愚蠢的东西,甚至不是我不知道的东西。再次感谢,一切正常,我现在想要的 :)
      • @Schollii:试着在 stackoverflow 论坛中解释你的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-30
      • 2012-04-16
      • 2013-07-13
      • 1970-01-01
      • 2016-11-06
      相关资源
      最近更新 更多