如何移交Lua函数参数?

时间:2018-05-01 00:04:43

标签: function class parameters lua

我正在使用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 :(得分:2)

dbc.connectDevice(name, id, ptid)
function DBC:connectDevice(name, id, ptid)

该函数被定义为一个方法,但被称为函数;您可能需要使用dbc:connectDevice(name, id, ptid)代替。

由于您将函数定义为方法,因此它希望传递隐式self参数,并且当您将其作为函数调用时,它将第一个参数作为隐式参数并移动所有其他参数,这就是你所看到的。

section in PiL可能有用。

答案 1 :(得分:2)

请记住,在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)