Функция Lua ожидает два параметра, даже если я объявил функцию с одним параметром - PullRequest
2 голосов
/ 13 февраля 2011

Рассмотрим код Lua ниже:

local util = {}

function util:foo(p)
  print (p or "p is nil")
end

util.foo("Hello World")
util.foo(nil, "Hello World")

Когда я запускаю это в консоли lua, я получаю следующий результат:

p is nil
Hello World

Может кто-нибудь объяснить мне это поведение.

Редактировать Я получил работающий код, внеся следующие изменения:

local util = {}

function util.foo(p)
  print (p or "p is nil")
end

util.foo("Hello World")
util.foo(nil, "Hello World")

Я довольно новичок в Lua, поэтому любые указатели / ссылки, объясняющие это поведение, будут оценены.1014 *

1 Ответ

10 голосов
/ 13 февраля 2011

http://www.lua.org/pil/16.html

Когда вы объявляете функцию с использованием синтаксиса: есть неопределенный параметр «self», который является объектом, над которым работает функция.Вы можете вызвать метод, используя синтаксис двоеточия:

util:foo("Hello World")

Если вы используете точечную нотацию, вы ссылаетесь на функцию как на запись в таблице util, и вам нужно передать 'self 'self.

Если foo объявлен с двоеточием, эти два вызова эквивалентны:

util:foo("Hello World")
util.foo(util, "Hello World")

Чтобы объявить то же самое с синтаксисом точки, вы должны сделать это:

function util.foo(self, p)
  print (p or "p is nil")
end

или

util.foo = function(self, p)
  print (p or "p is nil")
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...