首页 技术 正文
技术 2022年11月20日
0 收藏 384 点赞 3,591 浏览 1577 个字

函数的定义:在Lua中,函数是一种对语句和表达式进行抽象的主要机制。

一、函数基本用法      在Lua中,     1、函数既可以完成某项特定的任务。(被视为一条语句)     2、也可以只做一些计算并返回结果。(被视为一句表达式)格式:     function function_name( … )    

— body
     end

     —- 等同于      function_name=function( … )  –body  end

声明:     function关键字声明函数。end 关键字定义函数体的结束位置。( … )参数列表用于值传递。调用:     以上无论哪种用法都需要将所有参数放到一对圆括号中,即使调用函数没有参数列表,也必须写出一对空括号。对于此规则只有一种特殊的例外情况:一个函数若只有一个参数,并且此参数是一个字面字符或table构造式,那么圆括号便是可有可无的。 Lua 学习笔记(五)函数Lua 学习笔记(五)函数 二、多重赋值与多重返回值      定义:若实参多余形参,则舍弃多余的实参;若实参不足,则多余的形参初始化为nil。形式参数:由调用函数时的“实际参数”初始化的,用法与局部变量相似。如 Lua 学习笔记(五)函数Lua 学习笔记(五)函数      在Lua中,会自动调整函数返回值的数量以适应不同的调用情况。     1、若函数调用作为一条单独的语句时,Lua会丢弃所有返回值。     2、若函数作为表达式中的一部分来调用时,Lua只会保留函数的第一个返回值。     3、只有当一个函数调用是一系列表达式中的最后一个元素(或仅有一个元素)时。才能获得函数的所有返回值。 Lua 学习笔记(五)函数Lua 学习笔记(五)函数      特殊函数unpack:接受一个数组作为参数,并从下标1开始返回该数组的所有元素。unpack的一项重要用途体现在“泛型调用”机制中,泛型机制可以动态的以任何实参来调用任何函数。 Lua 学习笔记(五)函数Lua 学习笔记(五)函数 三、变长参数     在Lua中函数还可以接受不同数量的实参。例如print函数,在调用时可以传入一个或多个实参。 Lua 学习笔记(五)函数     Lua 学习笔记(五)函数 函数的变长参数以 “…”三个点表示,函数如果要访问变长参数时,使用“{…}”表达式来访问,这样变长参数会以table表中的元素的形式存在,这就像访问一个table一样,访问所有变长参数。然而在某些特殊的情况下,变长参数中会有nil值,此时就需要使用select来访问变长参数。     调用select时必须传入一个固定的实参select(选择开关)和一系列变长参数。格式          1、select( index,… ) 返回从index下标开始一直到变长参数列表结尾的元素。     2、select( ‘#’,… ) 返回变长参数列表的长度 Lua 学习笔记(五)函数Lua 学习笔记(五)函数 四、闭合函数          定义:若将一个函数写在另一个函数之内,那么这个位于内部的函数便可以访问外部函数中的局部变量,这项特征称之为“词法域”。外部函数中的局部变量在匿名函数内既不是全局变量,也不是局部变量,将其称之为“非全局变量”。     计数器的实现: Lua 学习笔记(五)函数Lua 学习笔记(五)函数 五、非全局的函数      只要将一个函数存储到一个局部变量中,就能得到一个“局部函数,也就是说只能在其作用域中使用。也可以在table中使用函数定义,即函数作为table中的元素存在。如: Lua 学习笔记(五)函数Lua 学习笔记(五)函数      当让Lua还有一种声明局部函数的方法: Lua 学习笔记(五)函数Lua 学习笔记(五)函数 六、正确的尾调用          尾调用的定义:当一个函数调用是另一个函数的最后一个动作时,该调用是一条“尾调用”。     function f( x ) return g( x ) end     尾调用的意义:当f函数调用完g函数后就再没有可执行的工作时,程序就不需要返回那个g所在的函数了。所以在尾调用之后程序也不需要保存任何关于该函数的栈信息了。当g返回时,执行控制权可以直接返回到调用f的那个点上。这种实现称为支持“尾调用消除”。     因此由于“尾调用”不会耗费栈空间,所以一个程序可以拥有无数嵌套的“尾调用”而不用担心造成栈溢出。必须明确确认尾调用: Lua 学习笔记(五)函数Lua 学习笔记(五)函数

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,946
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,472
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,285
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,101
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,733
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,768