lua本学习笔记功能
Lua本学习笔记功能
1、 函数返回
指定任务的主要功能是完成,在这种情况下,函数被用作调用语句。函数可以计算并返回值,在这种情况下,作为分配值表达式语句使用。
语法:
funcationfunc_name(arguments-list)
Statements-list
end
调用函数的时候,假设參数列表为空,必须使用()表示是函数调用。
Print(8*9,9/8)
a = math.sin(3) +math.cos(10)
print(os.date())
上述规则有一个例外。当函数仅仅有一个參数而且这个參数是字符串或者表构造的时候,()是可选的:
print “hello world” <--> print(“hello world”)
dofile ‘a.lua’ <-->dofile(‘a.lua’)
lua函数实參和形參的匹配与赋值语句类似。多余部分被忽略,缺少部分用nil补足.
2、 返回多个结果值
Lua函数能够返回多个结果值,比方strng.find,其返回匹配串“開始和结束的下标”(假设不存在匹配串返回nil)
s,e = string.find(“hello lua users”,”lua”)
print(s,e) -->7 9
lua函数中,在return后列出要返回的值得到列表就可以返回多值。如:
function maximum(a)
local mi = 1
local m = a[mi]
for i,val inipairs(a) do
ifval >m then
mi = i
m = val
end
return m,mi
end
print(maxmun({8,10,23,12,5})) -->23 3
3、 可变參数
Lua函数能够接受可变数目的參数。和C语言类似在函数參数列表中使用三点(…)表示函数有可变的參数。
Lua将函数的參数放在一个叫arg的表中,除了參数以外,arg表另一个域n表示參数的个数。
4、 命名參数
Lua的函数參数是和位置相关的,调用时实參会依照顺序依次传递给形參。有时候用名字指定參数是非常实用的,比方rename函数用来给一个文件重命名。有时候我们记不起命名前后两个參数的顺序:
rename(old = “temp.lua”,new = “temp1.lua”)
上面的代码是无效,lua能够通过将全部的參数放在一个表中。把表作为函数的唯一參数来实现上面这段伪代码的功能,由于lua语法支持函数调用时实參能够是表的构造。
Rename{old = “temp.lua”,new = “temp1.lua”}
依据这个想法我们重定义了rename:
functionrename(arg)
returnos.rename(arg.old,arg.new)
end
5、 闭包
当一个函数内部嵌套还有一个函数定义时,内部的函数体能够訪问外部的函数的局部变量,这个特种我们称为词法定界。尽管这个看起来非常清楚,事实并不是如此:
假如有一个学生姓名的列表和学生名和成绩对用的表:如今依据学习生的成绩从高到低对学生进行排序。能够这样做:
Names = {“peter”,”paul”,”mary”}
Grades = {mary =10,paul = 7,peter = 8}
Table.sort(Names,function(n1,n2))
ReturnGrades[n1]>Grades[n2]
end)
创建一个函数实现此功能
function sortbygrade (Names,Grades)
table.sort(Names,function(n1,n2))
returnGrades[n1]>Grades[n2]
end)
end
样例中包括在sortbygrade函数内部的sort中的匿名函数能够訪问sortbygrade的參数Grades。在匿名函数内部Grades不是全局变量也不是局部变量,我们称为外部的局部变量。
看例如以下代码:
functionnewCounter()
locali = 0
returnfunction() --匿名函数
i = i+1 --外部的局部变量
return i
end
end
c1 = newCounter()
print(c1()) --> 1
print(c1()) --> 2
匿名函数使用外部的局部变量保存它的计数。当我们调用匿名函数的时候i已经超出了作用范围,由于创建i的函数newCounter已经返回了,然后Lua用闭包的思想正确的处理了这种情况。简单说闭包是一个函数加上它能够正确訪问外部的局部变量。假设我们再次调用newCounter,将创建一个新的局部变量i,因此我们得到一个作用在新的变量i上的新闭包。
技手术称封闭装置值而不是功能,但是,函数原型声明关闭。
版权声明:本文博客原创文章。博客,未经同意,不得转载。
lua本学习笔记功能的更多相关文章
- GJM : Lua 语言学习笔记
Lua笔记 容易与C/C++整合 Lua所提供的机制是C所不善于的:高级语言,动态结构,简洁,易于测试和调试. Lua特有的特征: `1:可扩展性.卓越的扩展性导致了很多人将Lua用作搭建领域语言的工 ...
- LUA table学习笔记
function printT( ... ) for i,v in ipairs(...) do print(i,v) end end t1={} t2={} t3={} table.insert(t ...
- Lua JSONRPC学习笔记
JSON RPC JSON RPC 为利用json数据格式来执行远程调用方式, 作用同xmlrpc,不过与xmlrpc相比, jsonrpc更加轻量,json更加节省数据量,更加可读性高. 官网网站: ...
- Lua 基础 -- 学习笔记
标签(空格分隔): Lua 1. Lua可以一次性给多个变量赋值 变量比赋值多,多的变量就赋值nil 变量比赋值少,多的赋值舍弃 local a, b, c = 1, 2, 3 print( a, b ...
- lua学习笔记
工作需要,上周对lua赶进度似地学习了一遍,主要参考<lua中文教程>一书,中间参考一些<lua游戏开发实践>,首先说说这两本书,后者不适合初学,里面是对一个游戏脚本系统进行粗 ...
- [转]LUA 学习笔记
Lua 学习笔记 入门级 一.环境配置 方式一: 1.资源下载http://www.lua.org/download.html 2.用src中的源码创建了一个工程,注释调luac.c中main函数,生 ...
- lua游戏开发实践指南学习笔记1
本文是依据lua游戏开发实践指南做的一些学习笔记,仅用于继续自己学习的一些知识. Lua基础 1. 语言定义: 在lua语言中,标识符有非常大的灵活性(变量和函数名),只是用户不呢个以数字作为起始符 ...
- Lua学习笔记:面向对象
Lua学习笔记:面向对象 https://blog.csdn.net/liutianshx2012/article/details/41921077 Lua 中只存在表(Table)这么唯一一种数据结 ...
- Dynamic CRM 2013学习笔记(十二)实现子表合计(汇总,求和)功能的通用插件
上一篇 Dynamic CRM 2013学习笔记(十一)利用Javascript实现子表合计(汇总,求和)功能 , 介绍了如何用js来实现子表合计功能,这种方法要求在各个表单上添加js方法,如果有很多 ...
随机推荐
- 使用C#在Windows应用商店程序中获取CPU信息
using Windows.Devices.Enumeration; string guidStr="{97FADB10-4E33-40AE-359C-8BEF029DBDD0}" ...
- tomcat配置sqlserver数据库
1. 首先确保Tomcat安装文件夹中的\common\lib(对于Tomcat5.5)或者是\lib(Tomcat6.0)文件夹中已包括JDBC连接数据库所必须的三个.jar文件(msbase.ja ...
- IOS经典的书籍推荐
基础 objective-c基础教程 iphone 开发秘籍 进阶篇 iOS 6编程实战 Objective-C 高级编程:iOS与OS X多线程和内存管理 Effective Objective-C ...
- Android数据加载和Json解析——蓝本
1.下载数据来创建一个实体类 class MyData { String imagepath; String title; String desc; public MyData(String imag ...
- unity3d 依据指定的Assets下的目录路径 返回这个路径下的全部文件名称
using UnityEngine; using System.Collections; using System.Collections.Generic; using System.IO; < ...
- 每天收获一点点------Hadoop之初始MapReduce
一.神马是高大上的MapReduce MapReduce是Google的一项重要技术,它首先是一个编程模型,用以进行大数据量的计算.对于大数据量的计算,通常采用的处理手法就是并行计算.但对许多开发者来 ...
- ES6 扫盲
原文地址:ECMAScript 6 扫盲--小胡子 1. let.const 和 block 作用域 let 允许创建块级作用域,ES6 推荐在函数中使用 let 定义变量,而非 var: var a ...
- Echarts Jqplot嵌extjs4 windows 装配方法
js组件绘图终于是画在一个指定id的div或dom元素中. 在项目中有可能须要画在 Extjs容器中,研究了一下,能够通过下面的思路实现,方法跟大家共享下: 1.首先做一个容器,把此内容加入到wind ...
- rabbitMQ说明文档
rabbitMQ是什么 RabbitMQ 是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开 ...
- SD3.0四个协议解读
前面的文章提到过SD卡主要分为两个操作模式,一是初始化和识别操作模式.还有一种就是这篇文章须要分析的传输数据模式啦. 传输数据模式: 传输数据模式主要有六种状态,各自是Stand-by状态.Trans ...