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上的新闭包。

技手术称封闭装置值而不是功能,但是,函数原型声明关闭。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

时间: 2024-08-05 19:13:30

lua本学习笔记功能的相关文章

Lua JSONRPC学习笔记

JSON RPC JSON RPC 为利用json数据格式来执行远程调用方式, 作用同xmlrpc,不过与xmlrpc相比, jsonrpc更加轻量,json更加节省数据量,更加可读性高. 官网网站: http://www.json-rpc.org/ JSONRPC协议规范: http://www.json-rpc.org/wiki/specification lua实现的jsonrpc项目: https://github.com/craigmj/json4lua http://json.lua

LUA table学习笔记

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

Lua学习笔记(七):迭代器与泛型for

1.迭代器与闭包 迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素.在Lua中我们常常使用函数来描述迭代器,每次调用该函数就返回集合的下一个元素. 迭代器需要保留上一次成功调用的状态和下一次成功调用的状态,也就是他知道来自于哪里和将要前往哪里.闭包提供的机制可以很容易实现这个任务.记住:闭包是一个内部函数,它可以访问一个或者多个外部函数的外部局部变量.每次闭包的成功调用后这些外部局部变量都保存他们的值(状态).当然如果要创建一个闭包必须要创建其外部局部变量.所以一个典型的闭包的结构包含

Lua学习笔记(三):表的构造

构造器是创建和初始化表的表达式.表是Lua特有的功能强大的东西.最简单的构造函数是{},用来创建一个空表.可以直接初始化数组: 1 days = {"Sunday", "Monday", "Tuesday", "Wednesday", 2 "Thursday", "Friday", "Saturday"} Lua将“Sunday”初始化days[1](第一个元素索引为

《LUA游戏开发实践指南》学习笔记1

本文只做个人学习笔记! Lua脚本语言的优点:免费.小巧.快速和易移植. 游戏项目中的Lua,可以完成以下工作 编辑游戏用户界面(玩家和你的游戏进行交互的媒介) 定义.存储和管理游戏数据(Lua本人并没有直接访问外部数据库的能力,但可以使用C++组件) 管理游戏实时事件 创建和维护开发者有好的游戏存储和载入系统 编写游戏的人工智能(AI) 创建功能原型,可以之后用高性能语言移植 Lua入门 Lua控制台 lua脚本(扩展名为.lua的文本文本) 代码块(Chunk):单个命令或者一系列命令组成脚

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()) 上述规则有一个例外,当函数只

《lua程序设计(第二版)》学习笔记(五)

-- 第 5 章 函数 -- 一种对语句和表达式进行抽象的主要机制 print(os.date()); -- 打印日期 Sun Apr 20 12:44:46 2014 -- 一看到sun,感慨广州没有晴天 -- 函数没有参数也要括号 -- 特殊情况:只有一个参数的时候, 并且参数一个string/table构造式,可不写括号 print "Hello world" -- dofile "chapter03.lua" -- 冒号操作符:为面向对象式的调用而提供的函数

《lua程序设计 第二版》 学习笔记6 -------- 深入函数

-- 第6章 深入函数 -- 函数是一种"第一类值",他们具有特定的"词法域" -- "第一类值":与其他传统类型的值具有相同的权利.例如:存储到变量/table中,作为实参传递给函数或者作为其他函数的返回值 -- "词法域":一个函数可以嵌套在另一个函数中,内部函数可以反问外部函数的变量. local function testFun(x) return 2 * x end -- 函数定义方式1 local testFun

Lua学习笔记--环境配置&amp;Hello World

最近发现要恶补的东西实在是太多了,DX还没学完,现在发现还要用Lua脚本语言,于是,我的笔记又加了一个系列,Lua学习笔记. 一.简介 Lua是一门小巧的脚本语言,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能.Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行.Lua并没有提供强大的库,这是由它的定位决定的.所以Lua不适合作为开发独立应用程序的语言. Lua脚本可以很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序