function - Lua函数参数是如何传递的?

标签 function class parameters lua

我正在为一个项目使用 lua,现在我想在另一个文件中使用另一个类的一些函数。但它似乎不适合我。第一个参数没有被移交,但我不知道为什么。

文件索引.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

当我改变参数的顺序时,它就像一个偏移量,如下所示

索引.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

有人可以向我解释我必须做什么或者我犯了什么错误吗?

最佳答案

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

关于function - Lua函数参数是如何传递的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50109795/

相关文章:

javascript - 使用什么来代替 Angular 范围函数?

c++ - 在 C++ 中调用包含在类中的方法,并在 main 中调用变量和函数

c# - 使用 get 时更改对象状态

Java隐式方法/参数?

javascript - 如何在 Array.prototype 和 Object.prototype 的 javascript 中定义方法,使其不会出现在 for in 循环中

c++ - 如何在 C++ 中按值从函数返回数组

C++:在函数中使用共享指针作为参数是否可以,还是在浪费内存?

java - Type ChangeListener 不带参数

javascript - 使用带有返回值和 If/Else 语句的函数

java - 如何为具有元素迭代的 XML 解析创建模型类