lua从入门到放弃(七):lua函数

lua函数

在lua中,函数是对语句和表达式进行抽象的主要方法.既可以用来处理一些工作,也可以用来计算一些值.lua提供了很多內建函数,你可以很方便地在程序中调用它们,如print函数可以将值打印到控制台上.
lua函数主要有两种用途:

  1. 完成指定的任务,这种情况下函数作为调用语句使用
  2. 计算并返回值,这种情况下函数作为赋值语句的表达式使用.

函数定义

lua编程语言函数定义格式如下:

optional_function_scope function function_name(argument1,argument2,argument3,...,argumentn)
	function_body
	return result_params_comma_separated
end

解析:

  1. optional_function_scope: 该参数是可选的,指定函数是全局函数还是局部函数,未设置参数默认为全局函数,设置局部函数需要使用关键字local.
  2. function_name: 指定函数名称.
  3. argument1,argument2,argument3,…,argumentn: 函数参数,可以是0个至多个,多个参数以逗号隔开.
  4. function_body: 函数体,函数需要执行的代码语句块.
  5. result_params_comma_separated: 函数返回值,可以返回多个值,多个值以逗号分隔.
单返回值

定义函数max,参数num1和num2,返回参数最大值

function max(num1,num2)
	if (num1 > num2) then
		result = num1
	else
		result = num2
	end
	return result
end
print('2和5的最大值为:',max(2,5))
print('5和10的最大值为:',max(5,10))

执行结果如下:
在这里插入图片描述

多返回值

lua函数可以返回多个结果值,比如string.find函数返回匹配字符串的开始和结束下标
在这里插入图片描述
lua函数中在return后列出返回值的列表即可返回多个值
在这里插入图片描述

可变参数

lua函数可以接收可变数目的参数,和C语言类似在参数列表中使用三点…表示函数有可变数目的参数

function add(...)
	sum = 0
	for i,v in ipairs({...}) do
		sum = sum + v
	end
	return sum
end
print(add(1,2,3,4,5))

执行结果如下
在这里插入图片描述
我们也可以将可变参数赋值给一个变量

function average(...)
	sum = 0
	param = {...}
	for i,v in ipairs(param) do
		sum = sum + v
	end
	return sum/#param
end
print('平均值为:',average(1,2,3,4,5)) --计算平均值

执行结果为:
在这里插入图片描述
我们还可以通过select(’#’,…)来获取可变参数的数量

function average(...)
	sum = 0
	param = {...}
	for i,v in ipairs(param) do
		sum = sum + v
	end
	print('总共传入'..select('#',...)..'个参数')
	return sum/select('#',...)
end
print('平均值为:',average(1,2,3,4,5)) --计算平均值

执行结果为:
在这里插入图片描述
有时候我们可能需要几个固定的参数加上可变参数,固定参数要放在变长参数之前

function testParam(param1,...)
	print(param1)
	print(...)
end
testParam(1,2,3,4,5)

执行结果如下:
在这里插入图片描述
通常在遍历变长参数的时候只需要使用{…},然而变长参数有时可能为nil,那么就可以用select来访问变长参数:select(’#’,…)或select(n,…)

  1. select(’#’,…):返回可变参数的数量
  2. select(n,…):返回n到select(’#’,…)的参数

调用select时,必选传入一个固定实参selector(选择开关)和一系列变长参数.如果selector为数字n,那么select返回它的第n个可变实参,否则只能为字符串#,这样select返回变长参数的个数

function testParam(...)
        for i = 1, select('#',...) do
                param = select(i,...) --param只会接收一地个参数,多余的参数会被舍弃
                print('param1:',param)
                print('param2:',select(i,...))
        end
end
testParam(1,2,3,4,5)

执行结果如下:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值