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本学习笔记功能的更多相关文章

  1. GJM : Lua 语言学习笔记

    Lua笔记 容易与C/C++整合 Lua所提供的机制是C所不善于的:高级语言,动态结构,简洁,易于测试和调试. Lua特有的特征: `1:可扩展性.卓越的扩展性导致了很多人将Lua用作搭建领域语言的工 ...

  2. LUA table学习笔记

    function printT( ... ) for i,v in ipairs(...) do print(i,v) end end t1={} t2={} t3={} table.insert(t ...

  3. Lua JSONRPC学习笔记

    JSON RPC JSON RPC 为利用json数据格式来执行远程调用方式, 作用同xmlrpc,不过与xmlrpc相比, jsonrpc更加轻量,json更加节省数据量,更加可读性高. 官网网站: ...

  4. Lua 基础 -- 学习笔记

    标签(空格分隔): Lua 1. Lua可以一次性给多个变量赋值 变量比赋值多,多的变量就赋值nil 变量比赋值少,多的赋值舍弃 local a, b, c = 1, 2, 3 print( a, b ...

  5. lua学习笔记

    工作需要,上周对lua赶进度似地学习了一遍,主要参考<lua中文教程>一书,中间参考一些<lua游戏开发实践>,首先说说这两本书,后者不适合初学,里面是对一个游戏脚本系统进行粗 ...

  6. [转]LUA 学习笔记

    Lua 学习笔记 入门级 一.环境配置 方式一: 1.资源下载http://www.lua.org/download.html 2.用src中的源码创建了一个工程,注释调luac.c中main函数,生 ...

  7. lua游戏开发实践指南学习笔记1

    本文是依据lua游戏开发实践指南做的一些学习笔记,仅用于继续自己学习的一些知识. Lua基础 1.  语言定义: 在lua语言中,标识符有非常大的灵活性(变量和函数名),只是用户不呢个以数字作为起始符 ...

  8. Lua学习笔记:面向对象

    Lua学习笔记:面向对象 https://blog.csdn.net/liutianshx2012/article/details/41921077 Lua 中只存在表(Table)这么唯一一种数据结 ...

  9. Dynamic CRM 2013学习笔记(十二)实现子表合计(汇总,求和)功能的通用插件

    上一篇 Dynamic CRM 2013学习笔记(十一)利用Javascript实现子表合计(汇总,求和)功能 , 介绍了如何用js来实现子表合计功能,这种方法要求在各个表单上添加js方法,如果有很多 ...

随机推荐

  1. Cocos2d-Java安装和配置跨平台游戏引擎以及相关的开发工具

    假设认为博文图片不清晰.能够Ctrl+鼠标滚动缩放网页比例 Cocos2d-Java是什么? http://blog.csdn.net/touchsnow/article/details/387047 ...

  2. HTML5学习笔记简明版(10):过时的元素和属性

    被遗弃的元素(Element) 这个小节里列出的元素在HTML5里将不再使用,现有文档升级到 HTML5的话能够使用一些替代方案.比如parser section 能够处理isindex 元素的功能. ...

  3. MPQ Storm库 源代码分析 一个

    MPQ什么? MPQ维基上说的非常明确. 简而言之,它是暴雪公司用于游戏数据打包的工具.星际争霸,魔兽争霸游戏中都有使用.该工具内含游戏资源加密和压缩等功能.         git下载地址:http ...

  4. whu oj 1551 Pairs (莫队算法)

    problem_id=1551">题目链接 题目大意: 给出的询问,求出这个区间的里 差小于等于 2 的数字的对数. 思路分析: 莫队算法. 然后分析一下. 假设添加了一个数字.那么就 ...

  5. CIC and Fir 滤波器的级联

    在FDATool中 CIC 和 Fir 级联滤波器的设计 1 设计CIC滤波器的幅频特性曲线如下 2.设计FIR 滤波器的幅频特性曲线如下 3.总的特性曲线如下 4.把通带部分放大后的图,比较平坦

  6. 【SSH三框架】Hibernate基金会七:许多附属业务

    相对于上述一关系,在这里,下一个一对多关系说明. 另外,在上述.我们描述了许多人描述的一一对应关系.在关系数据库是多对一的关系.但也有许多关系. 但,只知道它是不够的,Hibernate它是一种面向对 ...

  7. 使用iframe从网页调起移动端应用

    比如想在网页中调起支付宝,我们可以创建一个iframe,src为: alipayqr://platformapi/startapp?saId=10000007&clientVersion=3. ...

  8. 正则表达式 \b (转)

    引用网上一段话: \b 是正则表达式规定的一个特殊代码(好吧,某些人叫它元字符,metacharacter),代表着单词的开头或结尾,也就是单词的分界处.虽然通常英文的单词是由空格,标点符号或者换行来 ...

  9. ABP应用层——应用服务(Application services)

    ABP应用层——应用服务(Application services) 点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之15.ABP应用层——应用服务(Applic ...

  10. .net Framework各个版本之间的发展

    原文:.net Framework各个版本之间的发展 上个星期看到了.NET 4.0框架退休日期逐渐临近文章,发现自己一直在使用NET  FrameWork,身为一个NET程序员,里面大概的区别自己还 ...