Как передаются параметры функции Lua? - PullRequest
0 голосов
/ 01 мая 2018

Я использую lua для проекта, и теперь я хочу использовать некоторые функции другого класса в другом файле. Но, похоже, это не работает для меня. Первый параметр не передается, но я не знаю, почему.

Файл index.lsp:

dbc = dofile("/home/mako/www/.lua/DBC.lua")
dbc.connectDevice(name, id, ptid)

DBC.lua:

function DBC:connectDevice(name, id, ptid)
    trace(name)
    trace(id)
    trace(ptid)
end

на трассе, которую я напечатал:

1
72893789(ptid)
nil

вместо

ESP
1
72893789

также, когда я изменяю порядок параметров, это похоже на смещение, как показано далее

index.lsp:

dbc.connectDevice(id, name, ptid)

DBC.lua

function DBC:connectDevice(id, name, ptid)
    trace(name)
    trace(id)
    trace(ptid)
end

на трассе, которую я напечатал:

ESP
72893789(ptid)
nil

вместо

1
ESP
72893789

Может кто-нибудь объяснить мне, что я должен делать, или я делаю какую-то ошибку?

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Помните, что в Lua синтаксис function DBC:connectDevice(name, id, ptid) ... end является просто сокращением для следующего кода:

function DBC.connectDevice(self, name, id, ptid)
  ...
end

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

DBC.connectDevice(DBC, name, id, ptid)

Или вы можете снова использовать синтаксис двоеточия для неявной передачи объекта:

DBC:connectDevice(name, id, ptid)
0 голосов
/ 01 мая 2018
dbc.connectDevice(name, id, ptid)
function DBC:connectDevice(name, id, ptid)

Функция определяется как метод, но вызывается как функция; вам, вероятно, нужно использовать dbc:connectDevice(name, id, ptid).

Поскольку вы определили функцию как метод, она ожидает, что неявный параметр self будет передан, а когда вы вызываете его как функцию, он принимает первый параметр в качестве этого неявного параметра и сдвигает все остальные параметры, что это то, что вы видите.

Этот раздел в PiL может быть полезен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...