lua点调用与冒号调用
时间: 2023-09-30 15:04:24 浏览: 63
在 Lua 中,有两种不同的函数调用方式:点调用和冒号调用。
点调用是使用点来调用函数的方式。例如:
```
local myTable = { x = 10, y = 20 }
function myTable:add(z)
return self.x + self.y + z
end
print(myTable.add(myTable, 30)) -- 使用点调用函数时需要传入self参数
```
这里我们定义了一个名为 `myTable` 的表,并在其中定义了一个名为 `add` 的函数。当使用点调用时,需要手动传入 `self` 参数,即 `myTable`。
而冒号调用则是使用冒号来调用函数的方式。例如:
```
local myTable = { x = 10, y = 20 }
function myTable:add(z)
return self.x + self.y + z
end
print(myTable:add(30)) -- 使用冒号调用函数时不需要手动传入self参数
```
在冒号调用中,Lua 会自动将调用者作为 `self` 参数传递给函数。因此,我们在使用冒号调用时不需要手动传入 `self` 参数。
需要注意的是,冒号调用只能用于调用表中的函数,而不能用于调用全局函数。
相关问题
lua 继承 调用父类方法
在 Lua 中可以使用冒号操作符(:)来调用父类方法。具体实现方式如下:
```lua
-- 定义一个基类 Animal
Animal = {}
function Animal:new(name)
local obj = {}
obj.name = name
setmetatable(obj, self)
self.__index = self
return obj
end
function Animal:speak()
print("Animal speaks.")
end
-- 定义一个子类 Dog
Dog = Animal:new()
function Dog:speak()
Animal.speak(self)
print("Dog barks.")
end
-- 测试调用父类方法
local animal = Dog:new("Dog")
animal:speak() -- 输出 "Animal speaks." 和 "Dog barks."
```
在这个例子中,Animal 是一个基类,Dog 是 Animal 的子类。在 Dog 中重载了 speak 函数,使用 Animal.speak(self) 调用了父类的 speak 函数,然后输出了 "Dog barks."。在测试中,创建了一个 Dog 对象,并调用了它的 speak 函数,输出了 "Animal speaks." 和 "Dog barks."。
unity里的函数在lua里那些是用冒号调用那些不用冒号调用
在Lua中,使用冒号调用函数时,第一个参数会被隐式地传入作为self变量。而如果使用点号调用函数,则需要显式地传入self变量作为第一个参数。
在Unity中的函数,如果定义在类中并且有self参数,通常使用冒号调用。例如:
```lua
-- 在Unity MonoBehaviour类中定义的Start函数
function MonoBehaviour:Start()
-- do something
end
```
而一些全局函数或者不需要self参数的函数,通常使用点号调用。例如:
```lua
-- Debug类中的全局函数Log
Debug.Log("Hello World")
```