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. 读改善c#代码157个建议:建议7~9

    目录: 建议7:将0值作为枚举的默认值 建议8:避免给枚举类型的元素提供显示的值 建议9:习惯运算符重载 一.建议7:将0值作为枚举的默认值 允许使用的枚举类型有:byte.sbyte.short.u ...

  2. C# Socket TCP Server & Client & nodejs client

    要调试公司某项目里的一个功能,因为要准备测试环境,趁这个机会重温了一下Socket(全还给老师了 -_-#),做个备份. C# Server static void Main(string[] arg ...

  3. 【C++基金会 04】vector详细解释

    根据写博客开始总有一些事情的习惯,加鸡汤文,今天请原谅我记得. ============================================= 今天要写的内容是顺序型容器.首先,标准库定义 ...

  4. 使用log4j日志-配置载入问题

    1.在eclipse中,把log4j.properties放在类路径下,在项目启动时就会自己主动载入. 2.在idea中.把log4j.properties放在类路径下,可是项目启动时不能直接载入(原 ...

  5. java 生产者消费者问题 并发问题的解决(转)

    引言 生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,如下图所示,生产者向空间里存放数据,而消费者取用数据,如果不加以协调可能会出现以下情况: 生产者消费者图 ...

  6. Java多线程总结之由synchronized说开去(转)

    这几天不断添加新内容,给个大概的提纲吧,方面朋友们阅读,各部分是用分割线隔开了的: synchronized与wait()/notify() JMM与synchronized ThreadLocal与 ...

  7. Duanxx的C++学习 : 数字转换String

    下面是这两个数字转换String道路.件:sstream string num2str1(unsigned int num) { stringstream ss; ss<<num; ret ...

  8. 如何关闭CBox(2.4版本号)强制升级的形式

    从今天开始2.4.0.9版本号CBox,提示检测到新的版本号,能够使用后必须更新为新版本号,提示表见下面的例子. 此次升级是强制升级.假如你选择不升级(单击窗体上的升级提示右下角"辍学but ...

  9. 新安装Win10

    随着微软发布Windows 10下载技术预览版.现在,您可以免费下载Windows 10技术预览ISO档,安装和开放经验. Windows 10技术预览提供的第一部英语.中国简体.葡萄牙语,含32位. ...

  10. Python标准库:内置函数format(value[, format_spec])

    的值的函数value按format_spec的格式来格式化,然而函数解释format_spec是依据value的类型来决定的.不同的类型有不同的格式化解释. 当參数format_spec为空时,本函数 ...