Lua学习---函数定义
1.函数定义的格式:
Lua使用function定义函数,语法如下:
function function_name (arc) --arc表示参数列表,函数的参数列表可以为空
--body
end
上面的语法等价于:
function_name function_name (arc)
--body
end_
上面的方法都是定义了一个全局函数,为了不污染命名空间,同时减少性能损耗,我们应该尽量使用“局部函数”,方法如下(只需要再前面加local声明即可):
local function function_name (arc) --arc表示参数列表,函数的参数列表可以为空
--body
end
注意:Lua函数的本质是变量赋值,所以再使用函数之前,一定要先定义函数(C语言可以再后面定义,前面声明,但是Lua没有声明,只有定义)
由于函数定义等价于变量赋值,也就可以把函数名替换为Lua某个表的字段,如:
function Foo.bar(a, b, c) --此时不能再加local函数声明了
end
2.函数参数
1)Lua函数的参数大部分是按值传递的。
函数传参的几个规则:
a、若参数个数大于形参个数,从左向右,多余的实参被忽略
b、若实参个数小于形参个数,从左向右,没有被初始化的形参被初始化为nil
c、Lua还支持变长参数。用...表示。此时访问参数也要用...,如:
local function func(...) --形参为 ... ,表示函数采用变长参数
local temp = {...} --访问的时候也要使用 ...
local ans = table.concat(temp, "") --使用table.concat库函数,对数组内容使用" "拼接成字符串。
print(ans)
end
func(1, 2) --传递了两个参数
func(1, 2, 3, 4) --传递了四个参数
-->output
1 2
1 2 3 4
2)当函数参数是table类型时,传递进来的实际上是实际参数的引用。如具名函数
3.函数的返回值
Lua函数允许返回多个值,返回多个值时,中间用逗号隔开
函数返回值的规则:
1)若返回值个数大于接收变量的个数,多余的返回值会被忽略掉;
2)若返回值个数小于参数个数,从左向右,没有被返回值初始化的变量会被初始化为nil
函数返回值与表达式:
1)当一个函数返回一个以上的返回值,且函数调用不是一个列表表达式的最后一个元素,那么函数只返回第一个返回值,如:
local function init() --init函数返回两个值 1和"lua"
return 1, "lua"
end
local x, y, z = init(), 2 --init函数的位置不在最后,此时只返回 1
print(x, y, z) -->output 1 2 nil
local a, b, c = 2, init() --init函数的位置在最后,此时返回 1 和 "lua"
print(a, b, c) -->output 2 1 lua
2)如果你确保只取函数返回值的第一个值,可以使用括号运算符,例如:
local function init()
return 1, "lua"
end
print((init()), 2) -->output 1 2
print(2, (init())) -->output 2 1
Lua学习---函数定义的更多相关文章
- 函数定义从零开始学C++之从C到C++(一):const与#define、结构体对齐、函数重载name mangling、new/delete 等
今天一直在学习函数定义之类的问题,下午正好有机会和大家共享一下. 一.bool 类型 逻辑型也称布尔型,其取值为true(逻辑真)和false(逻辑假),存储字节数在不同编译系统中可能有所不同,VC+ ...
- Lua的函数的定义、math数学函数、lua字符串的处理、lua支持的字符串类、模式串中的特殊字符_学习笔记04
Lua的函数的定义.math数学函数 定义函数 function [function name] (param1,param2) [function code] --定义一个函数用来求的两个数字的和 ...
- Lua 学习笔记(五)函数
函数的定义:在Lua中,函数是一种对语句和表达式进行抽象的主要机制. 一.函数基本用法 在Lua中, 1.函数既可以完成某项特定的任务.(被视为一条语句) 2.也可以 ...
- Lua学习笔记(三):函数和闭包
函数 lua的函数以function关键字开始,后跟函数名称和参数,最后以end结束,我们看一个简单的函数定义: function foo() --do something end function ...
- lua os.date函数定义和示例
os.date函数定义 原型:os.date ([format [, time]]) 解释:返回一个按format格式化日期.时间的字串或表. lua源码中os.date的注释如下: --- --- ...
- lua函数定义
FuncState proto结构数组保存函数原型信息;prev保存父函数体指针:actvar保存定义的局部变量:upvalues保存upvalue Lua源码中,专门有一个结构体FuncState用 ...
- Python函数基础学习(定义、函数参数、递归函数)
1.本程序是测试函数的基础.函数的参数.递归函数的测试. 函数的参数有: 必选参数.默认参数.可变参数.命名关键字参数和关键字参数 #!/usr/bin/python # -*- coding: ut ...
- python学习7—函数定义、参数、递归、作用域、匿名函数以及函数式编程
python学习7—函数定义.参数.递归.作用域.匿名函数以及函数式编程 1. 函数定义 def test(x) # discription y = 2 * x return y 返回一个值,则返回原 ...
- lua学习之函数篇
函数 函数是对语句和表达式进行抽象的主要机制 两种用法 一是可以完成特定的任务,一句函数调用被视为一条语句 二是以只用来计算并返回特定的结果,视为一句表达式 print("Hello, Wo ...
随机推荐
- 6.【应急响应】Linux入侵排查思路
0x01 入侵排查思路 一.账号安全 基本使用: 1.用户信息文件/etc/passwd root:x:0:0:root:/root:/bin/bash account:password:UID:GI ...
- LeetCode第20题:有效的括号
问题描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空 ...
- android开源项目:图片下载缓存库picasso
picasso是Square公司开源的一个Android图形缓存库,地址http://square.github.io/picasso/,可以实现图片下载和缓存功能. picasso有如下特性: 在a ...
- http-server swagger-editor启动成功后,访问404的解决方法
出现如图所示,则是swagger启动成功 但在网页访问是出现404,则查看下是否是在swagger-editor的目录下使用了该命令. 若在swagger-editor目录下使用命令启动,虽能启动成功 ...
- IPMITOOL常用操作指令V1.0
一.开关机,重启 1. 查看开关机状态: ipmitool -H (BMC的管理IP地址) -I lanplus -U (BMC登录用户名) -P (BMC 登录用户名的密码) power statu ...
- python接口自动化(三十六)-封装与调用--流程类接口关联续集(详解)
简介 上一篇已经给大家都介绍过了流程类接口关联,但是由于博客的登录机制改变,所以没有办法给小伙伴们实战演练一下,那么这篇就按照上一篇计划的用jenkins来给小伙伴们演示一下流程类接口的封装和调用,其 ...
- Java面向对象的三大特性 多态
多态 对象的多种形态 继承是实现多态的基础 1,引用多态 父类的引用可以指向本类的对象 父类的引用可以指向子类的对象 2,方法多态 创建本类对象时,调用的方法为本类方法 创建子 ...
- Typography 文字排版
标签的语义 1. 含语义的标签 2. 不含语义, 但是具有样式的class <h1></h1> <p class="h1"></p> ...
- 三种Hash算法对比以及秒传原理.
三种Hash算法对比以及秒传原理 CRC (32/64) MD5 Sha1 分5个点来说 1.校验值长度 2.校验值类别 3.安全级别 4.应用场景 1).校验值长度 CRC(32/64) 分别 ...
- Isolation Forest算法实现详解
本文介绍的 Isolation Forest 算法原理请参看我的博客:Isolation Forest异常检测算法原理详解,本文中我们只介绍详细的代码实现过程. 1.ITree的设计与实现 首先,我们 ...