lua基础---函数

简介: Lua的函数功能很强大,保留了C语言的一些基本的特性,但是也有C语言没有的特性,比如,lua可以在一个函数返回多个值,我们来看看下面这个案例:解释运行: lua test5.lua--定义一个函数,传入两个数,比较大小--函数名为:compare_max_or_min--返回值为:第...

Lua的函数功能很强大,保留了C语言的一些基本的特性,但是也有C语言没有的特性,比如,lua可以在一个函数返回多个值,我们来看看下面这个案例:


解释运行: lua test5.lua

--定义一个函数,传入两个数,比较大小
--函数名为:compare_max_or_min
--返回值为:第一个为max,第二个为min
--当然,在function关键字前面可以加local,声明为局部函数,不加local默认为
--全局函数
function compare_max_or_min(max , min)
	if max < min
	then 
		return min,max ;
	else 
		return max,min ;
	end
end

i = 111 ;
j = 200 ;

max,min = compare_max_or_min(i,j)
print("max:",max);
print("min:",min);


运行结果:

max:    200
min:    111

Lua的函数也还可以以函数作为参数,这一点有点类似C语言的函数指针,我们来看看:test5.lua

--定义一个函数,传入两个参数,比较大小,大的返回在前,小的在后
function compare_max_or_min(max , min)
	if max < min
	then 
		return min,max ;
	else 
		return max,min ;
	end
end

--定义一个函数,传入三个参数,第一个和第二个为要比较的数,第三个是一个函数
--作为参数进行传递,这里联想起C的函数指针
function CallBackFunction(max , min , comparemax)
	max = comparemax(max,min) ;
	return max ;
end 

--调用CallBackFunction
num1 = 385;
num2 = 999;
num3 = -2 ;
num4 = -6 ;
ret = CallBackFunction(num1,num2,compare_max_or_min) ;
ret1 = CallBackFunction(num3,num4,compare_max_or_min) ;
print("ret:",ret);
print("ret1:",ret1);
解释运行:lua test5.lua

运行结果:

ret:    999
ret1:   -2


Lua也可以像C语言一样,实现可变参函数

案例:test5.lua

--可变参: ...
--可以重新实现一个print的函数:Lua_Debug
function Lua_Debug(str , ...)
	print(str,...);
end

--可以传入多个参数,实现累加返回
function CalAdd(...)
	add_ret = 0 ;
	local arg = {...}
	for i , v in ipairs(arg) 
	do
		add_ret = add_ret + v ; 
	end
	return add_ret ;
end


ret = 0 ;
Lua_Debug("Hello world");
ret = CalAdd(1,2,3,4,5,6,7,8,9,10);
print("ret:",ret);
解释运行: lua test5.lua

结果:

Hello world
ret:    55



目录
相关文章
|
存储 C语言 图形学
C 函数中如何保存 Lua 的数据(1)
C 函数中如何保存 Lua 的数据(1)
159 0
|
存储 Java C语言
lua变量、数据类型、if判断条件和数据结构table以及【lua 函数】
lua变量、数据类型、if判断条件和数据结构table以及【lua 函数】
235 0
|
12月前
lua面向对象(类)和lua协同线程与协同函数、Lua文件I/O
Lua的面向对象编程、协同线程与协同函数的概念和使用,以及Lua文件I/O操作的基本方法。
142 4
lua面向对象(类)和lua协同线程与协同函数、Lua文件I/O
|
数据可视化 开发者 索引
详解Wireshark LUA插件函数:function p_myproto.dissector(buffer, pinfo, tree)
在 Wireshark 中,LUA 插件通过 `function p_myproto.dissector(buffer, pinfo, tree)` 扩展协议解析能力,解析自定义应用层协议。参数 `buffer` 是 `PacketBuffer` 类型,表示原始数据包内容;`pinfo` 是 `ProtoInfo` 类型,包含数据包元信息(如 IP 地址、协议类型等);`tree` 是
494 1
|
XML Java 数据格式
【Lua基础 第2章】lua遍历table的方式、运算符、math库、字符串操作方法
lua遍历table的方式、运算符、math库、字符串操作方法
982 0
【Lua基础 第2章】lua遍历table的方式、运算符、math库、字符串操作方法
|
C语言 C++ 索引
C 函数中如何保存 Lua 的数据(2)
C 函数中如何保存 Lua 的数据(2)
169 1
[✔️]lua中的module函数
[✔️]lua中的module函数
403 0
|
XML 自然语言处理 Java
【Lua基础 第5章 】unpack()和pack()、Lua 中的文件 I/O、简单模式下io的部分方法、完全模式下file的部分方法、日期和时间、闭包使用
unpack()和pack()、Lua 中的文件 I/O、简单模式下io的部分方法、完全模式下file的部分方法、日期和时间、闭包使用
1238 0
【Lua基础 第5章 】unpack()和pack()、Lua 中的文件 I/O、简单模式下io的部分方法、完全模式下file的部分方法、日期和时间、闭包使用
|
XML Java 数据格式
【Lua基础 第4章】Lua的流程控制、#的作用、table的创建方式、table表常用方法、函数、多返回值、可变长参数
Lua的流程控制、#的作用、table的创建方式、table表常用方法、函数、多返回值、可变长参数
242 0
【Lua基础 第4章】Lua的流程控制、#的作用、table的创建方式、table表常用方法、函数、多返回值、可变长参数