lua函数

lua函数


在lua中函数是对语句和表达式进行抽象的主要方法。既可以用来处理一些特殊的工作,也可以永安里计算一些值。

lua提供了许多内建的函数,可以很方便的在程序中调用他们,如print()函数可以将传入的参数打印在控制台上。

lua函数主要有两个用途:

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

函数定义


optional_function_scope function function_name(arg1,arg2...)
	function_body
	return result_params_comma_sepatated
end
  • optional_function_scope:该参数是可选的制定函数是全局函数还是局部函数,未设置该参数默认为全局函数,如果需要设置为局部函数需要使用关键字local。
  • function_name:指定函数名称。
  • arg1,arg2...:函数参数,以逗号分开。也可不带参数。
  • function_body:函数体。
  • result_params_comma_sepatated:函数返回值。可有多个返回值,以逗号分隔开。

实例


function max(num1, num2)
	if(num1 > num2) then 
		result = num1
	else
		restule = num2
	end
	return result
end

print("max = ", max(10,3))
print("max = ", max(1,3))
root@mzs:/home/mzs/lua_study/lua_mzs/hello# lua func.lua 
max = 	10
max = 	10

 

lua中我们可以将函数作为参数传递给函数:

myprint = function(param)
		print("this is print func - ##",param ,"##")
	  end

function add(num1, num2, functionPrint) 
	result = num1 + num2
	functionPrint(result)
end

myprint(10)
add(2,5,myprint)
root@mzs:/home/mzs/lua_study/lua_mzs/hello# lua func_param.lua 
this is print func - ##	10	##
this is print func - ##	7	##

多返回值


lua函数返回值可以返回多个结果值,比如string.find,其返回匹配串“开始和结束的下标”(如果不存在匹配串返回nil)

> s, e = string.find("www.baidu.com","baidu")
> print(s, e)
5	9
> 

lua函数中,在return后列出要返回值的列表即可,如:

function maximum(a)
	local mi = 1
	local m = a[mi]
	for i,val in ipairs(a) do 
		if val > m then
			mi = i
			m = val
		end
	end
	
	return m, mi
end

print(maximum({8,19,199,5,0}))
root@mzs:/home/mzs/lua_study/lua_mzs/hello# lua func_moreret.lua 
199	3

 

可变参数


lua函数可以接受可变数目的参数,和c语言类似,在函数参数列表中使用三点 (...)表示函数有可变的参数。

function add(...) 
	local s = 0
	for i, v in ipairs{...} -->{...}表示一个由变长参数构成的数组
	do 
		s = s + v
	end
	return s
end

print(add(3,4,5,6,7))
root@mzs:/home/mzs/lua_study/lua_mzs/hello# lua func_kebianparam.lua 
25

我们可以将可变参数赋值给一个变量

function average(...) 
	local result = 0
	local arg = {...}
	for i, v in ipairs(arg) -->{...}表示一个由变长参数构成的数组
	do 
		result = result + v
	end
	print("total args "..#arg.."个数")
	return result/#arg
end

print("average value =",average(10,5,3,3,5,6))
root@mzs:/home/mzs/lua_study/lua_mzs/hello# lua func_kebianparam.lua 
total args 6个数
average value =	5.3333333333333

我们也可以通过select("#",...),来获取可变参数的数量:

function average(...) 
	local result = 0
	local arg = {...}
	for i, v in ipairs(arg) -->{...}表示一个由变长参数构成的数组
	do 
		result = result + v
	end
	print("total args "..select("#",...).."个数")
	return result/select("#",...)
end

print("average value =",average(10,5,3,3,5,6))
root@mzs:/home/mzs/lua_study/lua_mzs/hello# lua func_kebianparam.lua 
total args 6个数
average value =	5.3333333333333

有时候我们可能需要几个固定参数加上可变参数,固定参数必须放在可变长参数之前:

function fwrite(fmt,...) -->固定参数fmt
	return io.write(string.format(fmt,...))
end

fwrite("fwrite mzs\n") --> 没有变长参数
fwrite("%d%d\n",1,2) --> fmt = "%d%d" ,变长参数为 1 、2
root@mzs:/home/mzs/lua_study/lua_mzs/hello# lua fun_kebian_bukebian.lua 
fwrite mzs
12

通常在遍历变长参数的时候只需要使用{...},然而变长参数可能会包含一些nil,那么就可以用select函数来访问变长参数了:

  • select("#",...) 返回可变参数的长度
  • select(n,...) 用于访问n 到select("#",...)的参数。
do 
	function foo(...)
		for i=1,select("#",...) do
			local arg = select(i, ...)
			print("arg = ",arg) 
		end
	end
	foo(1,2,3,4)
end
root@mzs:/home/mzs/lua_study/lua_mzs/hello# lua func_bianchang_select.lua
arg = 	1
arg = 	2
arg = 	3
arg = 	4

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值