函数的定义

function run1()endlocal function run2()end

function 和 local function 的区别

1 使用function声明的函数为全局函数,在被引用时可以不会因为声明的顺序而找不到 
2 使用local function声明的函数为局部函数,在引用的时候必须要在声明的函数后面

以下写法就会报错,需要将run2 函数放在run3之前。

function run3()run1()run2()
end
function run1()print("run1")
endlocal function run2()print("run2")
endrun3()

 这里function全局函数的引用不代表在run1之前调用run1函数就能执行,如下写法也会报错

run1()
function run1()print("run1")
end

 对象中函数的调用方式

方式有点和冒号两种方式,代码如下

it = {value = 1,run2 = function(self)print(self.value)end
}it.run1 = function(self)print(self.value)
endit:run1()
it.run1(it)

区别就是冒号可以将it隐含的作为函数的第一个参数。

形式参数

实参多余形参,则舍弃多余的实参;若实参不足,则多余的形参初始化为nil

5.1 多重返回值

函数支持返回多个返回值

local function run1(a, b)print(a.." "..b)
endlocal function run2()return 1, 2
endrun1(run2())

5.2 变长参数

 三个点...作为函数形参即可,此时...认为是一个表达式而已,需要{...}才能被认为是一个数组

function run1(...)local a, b, c = ...--print(a)local answer = 0for i, v in ipairs { ... } doprint(i.." "..v)answer = answer + vendreturn answer
endprint(run1(1, 2, 3))

select解析

function run1(...)for i=1, select('#', ...)dolocal arg = select(i, ...)print(arg)end
endprint(run1(1, 2, nil, 3))

select(n, ...)  --数字n表示起点,select(n, ...)返回从起点n到结束的可变参数,比如:

n=3,... 是 0,1,2,3,4,5

则 select(n, ...) 就表示...中从第3个到最后一个的多个数:2,3,4,5。并且2,3,4,5是4个数(逗号表达式),不是列表或其他的数据结构

因此 a = select(3,...) 就表示的是  a = 2,3,4,5。所以,a=2;

5.3 具名实参

希望将实参传入到指定的形参,如下代码,显然Lua是不支持的。但是只需要传入一个table即可实现

function run1(a, b)print(a, b)
endrun1(a=1, b=2)

解决办法:

c = {}
function run1(c)print(c.a, c.b)
end
c.a=1   c.b=2
run1(c)

Lua语言编程学习之路01----第五章 函数相关推荐

  1. Lua语言编程学习之路02----第13章 元表与元方法

    前言   在Lua中我们无法直接对两个table进行相加,无法对函数进行比较,也无法调用一个函数. 于是Lua可以通过修改一个值的行为,使其在面对一个非预定义的操作时执行一个自己实现的操作.比如两个t ...

  2. C语言-学习之路-01

    C语言学习之路-01 目录 关键字 数据类型 常量 变量 声明和定义 进制 sizeof关键字 整型:int short.int.long.long long 字符型:char ASCII对照表 转义 ...

  3. Python语言编程学习:文件路径变量修改,利用os模块固定文件父路径,变换文件子路径实现代码

    Python语言编程学习:文件路径变量修改,利用os模块固定文件父路径,变换文件子路径实现代码 目录 文件路径变量修改,利用os模块固定文件父路径,变换文件子路径实现代码

  4. Python语言编程学习:numpy中的array格式数据切片与pandas中的dataframe格式数据切片、相互转换

    Python语言编程学习:numpy中的array格式数据切片与pandas中的dataframe格式数据切片.相互转换 目录 numpy中的array格式数据切片与pandas中的dataframe ...

  5. c语言程序设计自学跟谁好,双辽c语言编程学习,双辽学c语言编程哪个好,双辽学c语言编程自学好还是报班好...

    双辽c语言编程学习,双辽学c语言编程哪个好,双辽学c语言编程自学好还是报班好 首页 > 软件 > 双辽c语言编程学习 作者:镀金池   发布时间:2017-12-07 05:48 一个C语 ...

  6. c语言 统计数量用count_C语言编程学习之递归实现汉诺塔图解!还有零基础入门视频~...

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  7. c语言程序设计需要学多久,九江c语言编程学习,九江学c语言编程报班,九江学c语言编程一般要多久才能学会...

    九江c语言编程学习,九江学c语言编程报班,九江学c语言编程一般要多久才能学会 首页 > C语言 > 九江c语言编程学习 作者:镀金池   发布时间:2017-10-18 14:11 据ID ...

  8. c语言编程基础心得,C语言编程学习心得体会

    C语言是在国内外广泛使用的一种计算机语言.其语言功能丰富.表达能力强.使用灵活方便.既具有高级语言的优点,又具有低级语言的许多特点,适合编写系统软件.本文是C语言编程学习心得,希望对大家有帮助. C语 ...

  9. c 语言编程学习 编程环境_学习C ++编程语言的前5个网站

    c 语言编程学习 编程环境 Let's have a look about C++ programming language first, 首先让我们看一下C ++编程语言, C++ is an Ob ...

最新文章

  1. python制作酷炫动画_厉害了!Python+matplotlib制作8个排序算法的动画
  2. python lambda函数加法_python lambda的使用详解
  3. 解决ueditor jquery javascript 取值问题
  4. Team Foundation Server 2010 安装、部署与配置(六):创建 Team Project .
  5. CentOS学习笔记 - 7. jekins安装 1
  6. nginx php 没认,NginX没有执行PHP
  7. 在线电脑内存测试软件,Everest/PC Mark内存基准测试_金士顿 8GB DDR3 1600_内存硬盘-中关村在线...
  8. 视频帧率截取图像工具
  9. Apache opennlp简单介绍
  10. python房地产_如何用Python爬虫投资房产,走向人生巅峰?
  11. MySQL安装QT连接MySQL学习记录
  12. sklearn聚类之OPTICS算法
  13. 微信解封快手链接;AWS 证实宕机;微软内部疑禁用 Slack | 极客头条
  14. java -jar 参数说明
  15. 巨杉数据库入选“金融科技高成长企业TOP30”榜单
  16. python实现-身高和体重排序
  17. java开发一个连连看小游戏
  18. FPGA(五):实现数学函数
  19. iOS灵活适配刘海屏手机的顶部状态栏高度和底部安全距离
  20. 微信安全中心:将处罚使用清理僵尸粉外挂用户

热门文章

  1. oracle中的取余函数
  2. 易基因|干货:手把手教你做RNA m5C甲基化测序分析(RNA-BS)
  3. python爬网易云_python爬网易云音乐-知了汇智
  4. android+手机+用短信发pdf文件,iPhone如何将PDF通过短信邮件发给别人【仅限iPhone6/6s】...
  5. 一寸照片压缩到20k_师大er:关于证件照你需要知道这些干货!(/^^)/ 顺便免费冲印高清照片~...
  6. 反向延长线段什么意思_《反向延长线》
  7. [二级域名映射端口][Ngins端口映射]腾讯云二级域名映射端口
  8. MySQL-01.深入理解MySQL底层数据结构
  9. 《Android软件安全权威指南》原生程序分析 阅读笔记
  10. laravel详情页