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学习---函数定义的更多相关文章

  1. 函数定义从零开始学C++之从C到C++(一):const与#define、结构体对齐、函数重载name mangling、new/delete 等

    今天一直在学习函数定义之类的问题,下午正好有机会和大家共享一下. 一.bool 类型 逻辑型也称布尔型,其取值为true(逻辑真)和false(逻辑假),存储字节数在不同编译系统中可能有所不同,VC+ ...

  2. Lua的函数的定义、math数学函数、lua字符串的处理、lua支持的字符串类、模式串中的特殊字符_学习笔记04

    Lua的函数的定义.math数学函数 定义函数 function [function name] (param1,param2) [function code] --定义一个函数用来求的两个数字的和 ...

  3. Lua 学习笔记(五)函数

    函数的定义:在Lua中,函数是一种对语句和表达式进行抽象的主要机制. 一.函数基本用法        在Lua中,      1.函数既可以完成某项特定的任务.(被视为一条语句)      2.也可以 ...

  4. Lua学习笔记(三):函数和闭包

    函数 lua的函数以function关键字开始,后跟函数名称和参数,最后以end结束,我们看一个简单的函数定义: function foo() --do something end function ...

  5. lua os.date函数定义和示例

    os.date函数定义 原型:os.date ([format [, time]]) 解释:返回一个按format格式化日期.时间的字串或表. lua源码中os.date的注释如下: --- --- ...

  6. lua函数定义

    FuncState proto结构数组保存函数原型信息;prev保存父函数体指针:actvar保存定义的局部变量:upvalues保存upvalue Lua源码中,专门有一个结构体FuncState用 ...

  7. Python函数基础学习(定义、函数参数、递归函数)

    1.本程序是测试函数的基础.函数的参数.递归函数的测试. 函数的参数有: 必选参数.默认参数.可变参数.命名关键字参数和关键字参数 #!/usr/bin/python # -*- coding: ut ...

  8. python学习7—函数定义、参数、递归、作用域、匿名函数以及函数式编程

    python学习7—函数定义.参数.递归.作用域.匿名函数以及函数式编程 1. 函数定义 def test(x) # discription y = 2 * x return y 返回一个值,则返回原 ...

  9. lua学习之函数篇

    函数 函数是对语句和表达式进行抽象的主要机制 两种用法 一是可以完成特定的任务,一句函数调用被视为一条语句 二是以只用来计算并返回特定的结果,视为一句表达式 print("Hello, Wo ...

随机推荐

  1. cookie 、Session 和自定义分页

    cookie cookie的由来 大家都知道Http协议是无状态的. 无状态的意思 是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系, 他不会受前面的请求响应情况直接影响, ...

  2. MapperScan的工作,Spring-Mybatis怎么自动getMapper

    @MapperScan @Import(MapperScannerRegistrar.class) @Repeatable(MapperScans.class) public @interface M ...

  3. 业务、数据记录——ThreadPool.QueueUserWorkItem及Redis的实现

    业务描述 当用户执行完业务操作,或者数据操作后,讲业务记录/数据追踪插入到Redis中.ThreadPool.QueueUserWorkItem定时检查队列并将上述数据插入到数据库中持久化. 实现流程 ...

  4. jquery对象访问

    jquery对象访问 方法名 说明 语法 (callback 执行的函数,object指定元素的对象.) each() 用于以当前jQuery对象匹配到的每个元素作为上下文来遍历执行指定的函数 jQu ...

  5. 2018牛客多校第九场E(动态规划,思维,取模)

    #include<bits/stdc++.h>using namespace std;const long long mod=1000000007,inv=570000004;long l ...

  6. 中山纪念中学20170310洗衣服(贪心,优先队列升序【pair】)

    #include<bits/stdc++.h>using namespace std;typedef pair<long long,int>clot;priority_queu ...

  7. hortonworks docker 安装

    1. 下载并解压安装脚本:  Hortonworks Data Platform (HDP) for Docker 2. 进入到解压后的目录,运行下面的命令,{HDPversion} 需要替换成相应目 ...

  8. 786A(博弈&bfs)

    题目链接: http://codeforces.com/problemset/problem/786/A 题意: 一个环形路径编号为1-n,1号点为黑洞,玩家轮流让怪物前进若干步(从自己的操作集合里随 ...

  9. 2017-10-7 清北刷题冲刺班p.m

    测试 A 同花顺 文件名 输入文件 输出文件 时间限制 空间限制card.cpp/c/pas card.in card.out 1s 512MB题目描述所谓同花顺,就是指一些扑克牌,它们花色相同,并且 ...

  10. 解读人:李琼,Metabolic profiling of tumors, sera and skeletal muscles from an orthotopic murine model of gastric cancer associated-cachexia(胃癌相关恶病质的原位小鼠模型中肿瘤,血清和骨骼肌的代谢谱分析)

    发表时间:(2019年4月) IF:3.950 单位: 厦门大学 厦门理工大学 物种:小鼠的肿瘤,血清和骨骼肌 技术:核磁共振代谢组学分析 一. 概述:(用精炼的语言描述文章的整体思路及结果) 本研究 ...