newlist

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

2014年3月1日

摘要: Lua的函数参数是和位置相关的,调用时实参会按顺序依次传给形参。有时候用名字指定参数是很有用的,比如rename函数用来给一个文件重命名,有时候我们我们记不清命名前后两个参数的顺序了:-- invalid coderename(old="temp.lua", new="temp1.lua")上面这段代码是无效的,Lua可以通过将所有的参数放在一个表中,把表作为函数的唯一参数来实现上面这段伪代码的功能。因为Lua语法支持函数调用时实参可以是表的构造。rename{old="temp.lua", new="temp1.lua&q 阅读全文
posted @ 2014-03-01 18:30 一枚程序 阅读(1724) 评论(0) 推荐(0)

摘要: Lua函数可以接受可变数目的参数,和C语言类似在函数参数列表中使用三点(...)表示函数有可变的参数。Lua将函数的参数放在一个叫arg的表中,除了参数以外,arg表中还有一个域n表示参数的个数。例如,我们可以重写print函数:printResult = ""function print(...) for i,v in ipairs(arg) do printResult = printResult .. tostring(v) .. "\t" end printResult = printResult .. "\n"end有时候我 阅读全文
posted @ 2014-03-01 18:25 一枚程序 阅读(430) 评论(0) 推荐(0)

摘要: 5.1 多返回值Lua函数可以返回多个结果值,比如string.find,其返回匹配串“开始和结束的下标”(如果不存在匹配串返回nil)。s, e = string.find("hello Lua users", "Lua")print(s, e) --> 7 9Lua函数中,在return后列出要返回的值得列表即可返回多值,如:function maximum (a) local mi = 1 -- maximum index local m = a[mi] -- maximum value for i,val in ipairs(a) do i 阅读全文
posted @ 2014-03-01 17:40 一枚程序 阅读(632) 评论(0) 推荐(0)

摘要: 3.6 表的构造构造器是创建和初始化表的表达式。表是Lua特有的功能强大的东西。最简单的构造函数是{},用来创建一个空表。可以直接初始化数组:days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}Lua将"Sunday"初始化days[1](第一个元素索引为1),用"Monday"初始化days[2]. 阅读全文
posted @ 2014-03-01 15:48 一枚程序 阅读(382) 评论(0) 推荐(0)

摘要: .. --两个点字符串连接,如果操作数为数字,Lua将数字转成字符串。print("Hello " .. "World") --> Hello Worldprint(0 .. 1) --> 01 阅读全文
posted @ 2014-03-01 13:27 一枚程序 阅读(281) 评论(0) 推荐(0)

摘要: and or not逻辑运算符认为false和nil是假(false),其他为真,0也是true.and和or的运算结果不是true和false,而是和它的两个操作数相关。a and b -- 如果a为false,则返回a,否则返回ba or b -- 如果a为true,则返回a,否则返回b例如:print(4 and 5) --> 5print(nil and 13) --> nilprint(false and 13) --> falseprint(4 or 5) --> 4print(false or 5) --> 5一个很实用的技巧:如果x为false或者 阅读全文
posted @ 2014-03-01 11:09 一枚程序 阅读(253) 评论(0) 推荐(0)

摘要: = == ~=这些操作符返回结果为false或者true;==和~=比较两个值,如果两个值类型不同,Lua认为两者不同;nil只和自己相等。Lua通过引用比较tables、userdata、functions。也就是说当且仅当两者表示同一个对象时相等。a = {}; a.x = 1; a.y = 0b = {}; b.x = 1; b.y = 0c = aa==c but a~=bLua比较数字按传统的数字大小进行,比较字符串按字母的顺序进行,但是字母顺序依赖于本地环境。当比较不同类型的值的时候要特别注意:"0" == 0 -- false2 < 15 -- true 阅读全文
posted @ 2014-03-01 11:04 一枚程序 阅读(254) 评论(0) 推荐(0)

摘要: 二元运算符:+ - * / ^ (加减乘除幂)一元运算符:- (负值)这些运算符的操作数都是实数。 阅读全文
posted @ 2014-03-01 10:58 一枚程序 阅读(189) 评论(0) 推荐(0)

摘要: 函数是第一类值(和其他变量相同),意味着函数可以存储在变量中,可以作为函数的参数,也可以作为函数的返回值。这个特性给了语言很大的灵活性:一个程序可以重新定义函数增加新的功能或者为了避免运行不可靠代码创建安全运行环境而隐藏函数,此外这特性在Lua实现面向对象中也起了重要作用(在第16章详细讲述)。Lua可以调用lua或者C实现的函数,Lua所有标准库都是用C实现的。标准库包括string库、table库、I/O库、OS库、算术库、debug库。 阅读全文
posted @ 2014-03-01 10:53 一枚程序 阅读(519) 评论(0) 推荐(0)

摘要: 2.4 Strings指字符的序列。lua是8位字节,所以字符串可以包含任何数值字符,包括嵌入的0。这意味着你可以存储任意的二进制数据在一个字符串里。Lua中字符串是不可以修改的,你可以创建一个新的变量存放你要的字符串,如下:a = "one string"b = string.gsub(a, "one", "another") -- change string partsprint(a) --> one stringprint(b) --> another stringstring和其他对象一样,Lua自动进行内存分配和 阅读全文
posted @ 2014-03-01 10:42 一枚程序 阅读(713) 评论(0) 推荐(0)

摘要: 表示实数,Lua中没有整数。一般有个错误的看法CPU运算浮点数比整数慢。事实不是如此,用实数代替整数不会有什么误差(除非数字大于100,000,000,000,000)。Lua的numbers可以处理任何长整数不用担心误差。你也可以在编译Lua的时候使用长整型或者单精度浮点型代替numbers,在一些平台硬件不支持浮点数的情况下这个特性是非常有用的,具体的情况请参考Lua发布版所附的详细说明。和其他语言类似,数字常量的小数部分和指数部分都是可选的,数字常量的例子:4 0.4 4.57e-3 0.3e12 5e+20 阅读全文
posted @ 2014-03-01 10:35 一枚程序 阅读(354) 评论(1) 推荐(0)

摘要: 两个取值false和true。但要注意Lua中所有的值都可以作为条件。在控制结构的条件中除了false和nil为假,其他值都为真。所以Lua认为0和空串都是真。 阅读全文
posted @ 2014-03-01 10:33 一枚程序 阅读(337) 评论(0) 推荐(0)

摘要: Lua中特殊的类型,他只有一个值:nil;一个全局变量没有被赋值以前默认值为nil;给全局变量负nil可以删除该变量。 阅读全文
posted @ 2014-03-01 10:32 一枚程序 阅读(377) 评论(0) 推荐(0)

摘要: 标示符:字母(letter)或者下划线开头的字母、下划线、数字序列.最好不要使用下划线加大写字母的标示符,因为Lua的保留字也是这样的。Lua中,letter的含义是依赖于本地环境的。保留字:以下字符为Lua的保留字,不能当作标识符。and break do else elseifend false for function ifin local nil not orrepeat return then true untilwhile注意:Lua是大小写敏感的.注释:单行注释:--多行注释:--[[ --]]--[[print(10) -- no action (comment)--]] 阅读全文
posted @ 2014-03-01 10:31 一枚程序 阅读(249) 评论(0) 推荐(0)

摘要: 全局变量不需要声明,给一个变量赋值后即创建了这个全局变量,访问一个没有初始化的全局变量也不会出错,只不过得到的结果是:nil.print(b) --> nilb = 10print(b) --> 10如果你想删除一个全局变量,只需要将变量负值为nilb = nilprint(b) --> nil这样变量b就好像从没被使用过一样.换句话说, 当且仅当一个变量不等于nil时,这个变量存在。 阅读全文
posted @ 2014-03-01 10:28 一枚程序 阅读(306) 评论(0) 推荐(0)

摘要: Chunk是一系列语句,Lua执行的每一块语句,比如一个文件或者交互模式下的每一行都是一个Chunk。每个语句结尾的分号(;)是可选的,但如果同一行有多个语句最好用;分开a = 1 b = a*2 -- ugly, but valid一个Chunk可以是一个语句,也可以是一系列语句的组合,还可以是函数,Chunk可以很大,在Lua中几个MByte的Chunk是很常见的。你还可以以交互模式运行Lua,不带参数运行Lua:Lua 5.0 Copyright © 1994-2003 Tecgraf, PUC-Rio>你键入的每个命令(比如:"Hello World" 阅读全文
posted @ 2014-03-01 10:09 一枚程序 阅读(1897) 评论(0) 推荐(0)