lua基础---函数

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

时间: 2025-01-20 11:49:08

lua基础---函数的相关文章

Lua中函数与面向对象编程的基础知识整理_Lua

函数 1. 基础知识调用函数都需要写圆括号,即使没有参数,但有一种特殊例外:函数若只有一个参数且参数是字面字符串或table构造式,则圆括号可有可无,如dofile 'a.lua',f{x=10, y=20}. Lua为面向对象式的调用提供冒号操作符的特殊语法,如o.foo(o, x)等价于o:foo(x).和Javascript类似,调用函数时提供的实参数量可以与形参数量不同,若实参多了则舍弃,不足则多余的形参初始化为nil. 1.1 多重返回值 Lua允许函数返回多个结果,函数返回如retu

【COCOS2DX(2.X)_LUA开发之三】在LUA中使用自定义精灵(LUA脚本与自创建类之间的访问)及LUA基础讲解

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/lua-game/985.html 本篇做起来比较累,大家请参考最新篇[COCOS2DX-LUA 脚本开发之四]使用tolua++编译pkg,从而创建自定义类让Lua脚本使用 此篇可能会在最新的cocos2dx版本中出现如下问题: 1 2 LUA ERROR: ...24F82-1230-41FE-8A04-C445FB7D1BAB/mtet

Lua中函数的几个特别之处探究_Lua

没想到距离上一篇基础补充已经过了1年多了,最近准备捡回Lua,把基础都补补,今天来聊聊Lua的函数吧~ 0.环境 我突然对Lua又大感兴趣的最主要原因是,Cocos Code IDE开始浮出水面了,它是Cocos2d-x官方出的一款专门针对Cocos2d-x+Lua或JS的IDE,试着用了,虽然不能说很完美,但,很值得期待. 所以,本文使用的Lua编辑器就选它了,大家就随意吧~ 1.扫盲--Lua的函数 Lua要创建和调用函数都十分简单,如代码: 复制代码 代码如下: function muto

lua 基础教程_Lua

最近在看lua,觉得很有趣,发现没有最新版本的例子,所以自己就别人的博客里弄了源码,然后改成最新版本的lua C API. 关于lua非常基础的就不介绍了,咱们就从简单的测试开始吧. 在此之前如果没有搭好lua在win32下的环境,请看 http://www.jb51.net/article/61451.htm 1.C/C++执行lua脚本 我只是用改用了最新的lua的C API.不多说,直接上代码 #include <iostream> #include <stdlib.h> #

JavaScript基础函数整理汇总_基础知识

这里给大家整理汇总了一些javascript的基础函数,都是比较常用和实用的.整理出来也有助于大家更好的理解javascript. 复制代码 代码如下: <script type="text/javascript">     /*创建函数和字面量函数*/     /*         function add(){             alert("函数创建成功")         };         var testfunction=functi

lua匿名函数问题,和我预期的不太一样,请帮忙看下,谢谢

问题描述 lua匿名函数问题,和我预期的不太一样,请帮忙看下,谢谢 print(function() return 1 end) 我以为会打印1,但是实际打出funciton??? 求解惑,为什么是这样,怎么修改使其打印成1??? 3q 解决方案 print((function() return 1 end)())

Lua基础(转)

局部定义与代码块: 使用local声明一个局部变量或局部函数,局部对象只在被声明的那个代码块中有效. 代码块:一个控制结构.一个函数体.一个chunk(一个文件或文本串)(Lua把chunk当做函数处理) 这样,可以在chunk内部声明局部函数,该函数仅在chunk内可见,并且词法定界保证了包内其他函数可以调用此函数.    在chunk内部定义多个local function并且相互调用(或定义local递归调用函数)时,最好先声明,再定义. 应该尽可能的使用局部变量(使用关键词local声明

JavaScript 基础函数_深入剖析变量和作用域_基础知识

函数定义和调用 定义函数,在JavaScript中,定义函数的方式如下: function abs(x){ if(x >=0){ return x; }else{ return -x; } } 上述abs() 函数的定义如下: function 指出这是一个函数定义; abs 是函数的名称: (x) 括号内列出函数的参数,多个参数以,分隔: {...}之间的代码是函数体,可以包含若干语句,甚至可以没有任何语句. 注意:函数体内部的语句在执行时,一旦执行到return 时,函数就执行完毕,并将结果

ffmpeg基础函数的问题

问题描述 ffmpeg基础函数的问题 avcodec_decode_video2(pcodectx,pframe,&framefinished,&packet,rawdata,byteremaining);最后两个参数具体有什么用啊,求大神指导啊 解决方案 一个是原始数据字节数组 一个是剩余多少字节