分享

lua新手的笔记

 icecity1306 2014-08-13

lua中的比较运算符有==以外,还有>(大于),<(小于),~=(不等于)以及<=和>=,注意区别~=的不同
Lua语言具有动态变量的特点,也就是说在使用一个变量的时候,不需要事先声明它的类型。
需要注意的是,换行符就代表一个语句的结束,也可以用;来表示出来语句的结束来把多行写在一行。
Lua里直接可以把函数抽象的当做一种变量来使用,而不需要函数指针这种模仿处理器方式的间接产物。
Lua中,函数名也是变量名,所以有一个需要注意的地方:如果给函数包括系统函数,比如print,赋予一个值,那么它就不再是一个函数了

。这样做有一个好处:程序员可以很方便地重构系统函数,比如sys_print=print print=myprint。但是缺点就是必须得小心的敲打变量名,

因为没有声明的过程,使用时会不小心覆盖掉原来的变量或者声明出全新的变量(但这个当然会提示)。
为了可复用性,也就是其他程序员可以直接利用你的代码。函数中的变量应该全都是局部变量,局部变量要在其第一次出现,定义时在其先

用local显示的声明,local只能出现在一个语句的开始部分来定义第一个变量是局部变量。
函数的语法是
function name (parm1, parm2, ...)
   ...
end
函数可以返回多个值,之间用","隔开就可以了,接受这个函数的返回值时,=之前的也要是","隔开的多个变量。

表是Lua的灵魂,是当中最灵活,最多变(也就是最复杂)的部分。
a={}; 这样就声明了一个表。表的作用是,在当中储存许多个变量
在lua以外的几乎所有语言中,数字下标都是从0开始的,这是因为内存地址的分配方式(也许)。总之还是从1开始比较符合人类习惯。而在

一些面向对象语言当中,bx.status这种变量,叫做bx对象的属性。
接下来是比较复杂的bx:totalfinger()用冒号调用一个函数,意思是把自己作为第一个变量传递给函数,也就是说这个写法其实和
bx.totalfinger(bx)是一个意思。通常lua中的表中包含的函数,会处理一个self的默认参数,这就类似于c语法中的this

if else的语法是:
if a==nil  
then
   print("NIL!")
else
   print(a)
end
当a没有值的时候,一个最新定义的它就是默认的nil。
在lua中,nil和false都当作条件不成立。其他都当作条件成立,但是在lua里面false==nil返回的是false
还有对应的while...do...end和repeat...until...,可以利用 break 语句在其中跳出循环。
for的语法相当不同,for variable = from_exp , to_exp [, step_exp] do block end
c中是用";"作为for的子语句的区分的,lua是用",",但lua中不是一定要把每个子语句和其","都写出来的。
for在lua中有遍历iterator的功能,利用默认的pairs ()和ipairs ()以表明作为参数时分布可以返回默认的索引和值二个返回值,按照数字

排序的索引和值二个返回值,因为是二个返回值,所以格式要写如下:
test_table=

   bx="早餐",
   jox="午餐"
}
for i,j in pairs(test_table) do
   print(i.."没吃"..j)
end
-------
出来的结果是
bx没吃早餐
jox没吃午餐
-------
另外还有一个函数next(table [,index])可以枚举iterator用。next的返回值也是二个。

lua对字符串操作的扩充是很有用的
主要的是连字符"..",它的作用也很简单:将前后两个变量连接成一个新的字符串。
还有就是string这个lua库支持的表(lua的类),里面包含了大量对字符串有用的操作。
string.byte ( s [, i [, j]])或者s:byte ( [, i [, j]])可以按照byte(字符的字节)形式获得指定index位置的字符的值,对应的有

string.char ( i1, i2, ...)来把i1, i2转换成对应的字符
string.dump(function),可以把用lua所写的(而非lua_register之类加进来的外部扩充)函数的语句保存到它的返回值里。
string.find(s, pattern [, init [, plain]])或者另一个用法s:find(pattern [, init [, plain]])可以查找一个字符串在s的位置,

plain指定查找的开始位置,默认为1。
string.format ( s, e1, e2, ...)和s:format ( e1, e2, ...)是格式化字符串, s被当做格式,而返回值则是格式化好的字符串。
以%开头的字符就是format字符串的组成部分,包含c, d, E, e, f, g, G, i, o, u, X, 和x,要对应数字类型的变量,q 和 s 对应一个字

符串类型的变量
> = string.format("%s %q", "Hello", "Lua user!")   -- string and quoted string
Hello "Lua user!"
> = string.format("%c%c%c", 76,117,97)             -- char
Lua
> = string.format("%e, %E", math.pi,math.pi)       -- exponent
3.141593e+000, 3.141593E+000
> = string.format("%f, %g", math.pi,math.pi)       -- float and compact float
3.141593, 3.14159
> = string.format("%d, %i, %u", -100,-100,-100)    -- signed, signed, unsigned integer
-100, -100, 4294967196
> = string.format("%o, %x, %X", -100,-100,-100)    -- octal, hex, hex
37777777634, ffffff9c, FFFFFF9C

string.gmatch(s, pat)和s:gmatch(pat)可以从s中匹配pat出来
特别注意lua库支持的字符串匹配,这儿的pat可以是format字符串里的%?的格式化字符
还可以在一个字符后面带上*, +, - 或?.来表示特殊的匹配数量。*代表其前的字符串匹配0个或者更多个。+代表至少一个或更多个。-和*的

匹配方式相同,但匹配出来的字符串会是尽可能显示的短的,意味着要是可以只匹配第一个字符的话,就会只显示第一个字符。?,则匹配0

个或1个。
当需要匹配一个特定单词时,可以用 w...这样的格式,代表匹配一个w开头的单词。
另外,还有一个特殊的组合,[xyjkn]可以出现在pat中,这个格式代表匹配xyjkn中的任一个。'[j-q]'则匹配j-q之间的字符。其中还可以使

用%d的格式化字符,但有一个特殊的字符"^",它出现在pat代表着其后的东西都不愿意被匹配到,可以是[j-q],也可以是[%d],或者普通的

字符,但其前的任一个仍可被匹配到。

最后,lua中的一行的注释是用"--"来开始的,就像sql语言一样。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多