Lua 数据类型 —— 函数

本文详细介绍了Lua中的函数结构,包括声明和使用。探讨了函数入参的灵活性,如可变参数的接收与处理,以及多值返回的规则。还讲解了table.pack和table.unpack的用法,并阐述了尾调用的概念及其在优化中的作用。
摘要由CSDN通过智能技术生成

一、函数结构

1、声明

optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)
    function_body
    return result_params_comma_separated
end
  • optional_function_scope: 该参数是可选的制定函数是全局函数还是局部函数,未设置该参数默认为全局函数,如果需要设置函数为局部函数需要使用关键字 local。
  • function_name: 指定函数名称。
  • argument1, argument2, argument3…, argumentn: 函数参数,多个参数以逗号隔开,函数也可以不带参数。参数的行为与局部变量的行为完全一致(可以通过下面的例子体会)。
  • function_body: 函数体,函数中需要执行的代码语句块。
  • result_params_comma_separated: 函数返回值,Lua 语言函数可以返回多个值,每个值以逗号隔开。

入参的行为

print("参数局部变量:")
function params(a, b)
    print("函数内部,未改变值:", a, b)     --> 函数内部,未改变值:	1	2
    a = 10
    b = 100
    print("函数内部,未改变值:", a, b)     --> 函数内部,未改变值:	10	100
end
local a = 1
local b = 2
print("入参前:", a, b)     --> 入参前:	1	2
params(a, b)
print("入参后:", a, b)     --> 入参后:	1	2

2、使用

函数的调用和 java 、 kotlin 没有区别

只是如果函数只有一个参数,且该参数类型是 字符串常量 或是 表构造器 ,则括号是可选,只需隔开一个空格。

-- 等同于 print("function")
print "function"                 --> function
-- 等同于 dofile("字符串.lua")
dofile "字符串.lua"
-- 等同于 type({})
print(type {
   })                   --> table

二、入参

1、入参个数

参数个数没有规定一定要和函数声明的个数一致,多余会被抛弃,不足参数会被设置为 nil .

function multiParams(p1, p2, p3, p4, p5)
    print(p1, p2, p3, p4, p5)
end
multiParams()                           --> nil	nil	nil	nil	nil
multiParams(1)                          --> 1	nil	nil	nil	nil
multiParams(1, 2)                       --> 1	2	nil	nil	nil
multiParams(1, "jiang", 2)              --> 1	jiang	2	nil	nil
multiParams(1, "jiang", 2, "peng")      --> 1	jiang	2	peng	nil
multiParams(1, "jiang", 2, "peng", 3)   --> 1	jiang	2	peng	3
multiParams(1, "jiang", 2, "peng", 3, "yong")   --> 1	jiang	2	peng	3

可以利用这一特性,加上 a or 默认值 达到默认值

local globalCounter = 0
function initGlobal(n)
    n = n or 1
    globalCounter = globalCounter + n;
end
initGlobal()
print(globalCounter)            --> 1
initGlobal(10086)
print(globalCounter
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值