烟台网站建设精通臻动传媒,免费国内ip,建设网站安全措施,装修案例分享的文案1. 函数前的冒号和点号
点号#xff08;.#xff09;和冒号#xff08;:#xff09;的区别主要在于是否自动处理self参数。
在Lua中#xff0c;函数定义时前面有点号#xff08;.#xff09;和冒号#xff08;:#xff09;的区别主要体现在函数如何处理其第一个参数…1. 函数前的冒号和点号
点号.和冒号:的区别主要在于是否自动处理self参数。
在Lua中函数定义时前面有点号.和冒号:的区别主要体现在函数如何处理其第一个参数即隐式的self参数。具体来说 使用点号.定义或调用函数时函数就是一个普通的函数不会自动处理self参数。这种方式通常用于访问模块或表中的函数而不是对象的方法。 使用冒号:定义或调用函数时Lua会自动将调用该方法的表作为第一个参数传递给函数这个参数通常被命名为self。这种方式用于定义和调用对象的方法能够让你在函数内部访问和操作对象的状态。
两者的区别如下述例子所示
local myTable {}
myTable.value 5function myTable:setValue1(val)self.value val
endfunction myTable:getValue1()return self.value
endfunction myTable.setValue2(table, val)table.value val
endfunction myTable.getValue2(table)return table.value
end-- 使用冒号调用Lua会自动把myTable作为第一个参数传递给setValue
myTable:setValue1(10)
print(myTable:getValue1()) -- 输出10-- 使用点号调用需要显式传递myTable作为参数
myTable.setValue2(myTable, 20)
print(myTable.getValue2(myTable)) -- 输出20在这个例子中setValue函数使用了冒号定义所以当你使用myTable:setValue(10)调用它时myTable自动作为第一个参数即self传递给setValue。而getValue函数使用了点号定义所以需要显式地将myTable作为参数传递给它。
2. 全局函数和局部函数
如果Lua函数定义或调用时既没有使用点号.也没有使用冒号:那么这个函数就被视为一个普通的全局函数或局部函数不涉及任何隐式的self参数传递。这种情况下函数的行为和参数传递完全基于显式提供的参数与对象或表没有直接的关联。
2.1 全局函数
如果函数直接定义在脚本的顶级作用域中没有绑定到任何表上那么这个函数就是一个全局函数。全局函数可以在它们被定义的任何地方被调用除非被局部作用域的同名变量遮蔽。
function globalFunction()print(这是一个全局函数)
endglobalFunction() -- 调用全局函数2.2 局部函数
如果函数使用local关键字定义那么这个函数就是一个局部函数它只能在定义它的那个作用域及其子作用域中被访问。
local function localFunction()print(这是一个局部函数)
endlocalFunction() -- 调用局部函数这种方式定义的函数不涉及到面向对象编程中的self参数概念也不需要通过某个对象或表来调用。它们通常用于执行不特定于任何对象状态的任务或者用于组织代码逻辑提高代码的复用性和模块化。
没有使用点号或冒号的函数调用或定义意味着它是一个独立的、不自动关联任何表的普通函数这种函数的调用和参数传递完全取决于你在调用时所提供的参数。