Lua аргументы, переданные функции в таблице, равны нулю - PullRequest
6 голосов
/ 22 декабря 2011

Я пытаюсь понять, как ООП выполняется в 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();

К вашему сведению, я работаю с Corona SDK, хотя я предполагаю, что это ничего не меняет (за исключением того, что, как я полагаю, откуда взялась print ()). В любом случае, меня убивает то, что inName равно nil, как сообщает print (inName) ... поэтому myName, очевидно, имеет значение nil, поэтому вызовы sayHello () завершаются неудачно (хотя они работают нормально, если я жестко кодирую значение для myName, из-за чего я думаю, что основная структура, которую я пытаюсь использовать - это звук, но я должен упустить что-то простое). Насколько я могу судить, похоже, что при вызове newPerson () значение inName не устанавливается, но я не могу понять, почему; Я не понимаю, почему это не так, как любой другой вызов функции.

Любая помощь будет оценена. Спасибо!

Ответы [ 2 ]

11 голосов
/ 22 декабря 2011

Помните, что это:

function Person:newPerson(inName)

Эквивалентно этому:

function Person.newPerson(self, inName)

Поэтому, когда вы делаете это:

Person.newPerson("Frank");

Вы проходите одинпараметр функции, которая ожидает two .Вы, вероятно, не хотите, чтобы newPerson был создан с помощью :.

9 голосов
/ 22 декабря 2011

Попробуйте

Frank = Person:newPerson("Frank");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...