在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1.目前最新的lua版本是lua5.2.3 2.官网下载地址:http://www.lua.org/ftp/ 3.lua的初衷就是一个用于c/c++的小巧的脚本语言,本身是什么功能都没有的,需要手动用C++扩展它。 4.我们在实际的应用开发(基本上是游戏开发),通常是用C/C++实现功能,而用lua来实现逻辑。 5.lua是一个动态的脚本语言,动态是指程序在运行时可以改变其结构。 6.解压下载后的lua包发现,src全是用c语言开发的,因此可知其跨平台性非常良好 7.我们可以在目前的三大主流平台(win32,linux,Mac/ios)对其进行编译. 8.在linux和mac平台,可以在终端下,直接使用make命令对其编译,因为里面已经自带了编写好的Makefile,不过需要选择编译的平台:make linux ,或者:make macosx,而windows平台,没有make工具,因此可以使用VS工具,新建一个c语言工程,将所有的源代码(src)拷贝进去,也就可以直接编译成lua.lib了。 9.在linux平台和mac平台会生成两个可执行文件:lua和luac,我们可以自建一个bin目录,然后把这两个文件拷贝进去 10.lua是一个lua可执行程序,可以直接执行xx.lua文件,而luac是lua的编译器,可以将xx.lua编译成一个二进制的可执行程序,默认为:luac.out,此时可以用./lua luac.out来执行它 11.lua中的注释: --表示单行注释 --[[ --]] (两对中括号+ --)表示多行注释 12.lua中所有的数字都是double,例如:num=58 --其中double占8个字节(64位),其中有52位,用于保存精确的int,因此对于52位以内的int,精度没有问题。 13.字符串的表示: s = 'walternate' -- 像Python那样的不可变的字符串,用单引号括起来 t = "双引号也可以" --用双引号括起来 u = [[ 两个方括号 t = nil -- 未定义的t,空串,Lua 支持自动垃圾回收,采用先标记后清除的垃圾回收算法 14.do/end之类的关键字标示出程序块: while num < 50 do 15.If语句的使用: 16.lua中所有的变量默认都是全局的,如何定义局部变量呢,用local关键字修饰: local line = io.read() -- 读取stdin的下一行 17.字符串的连接用两个点 .. print('Winter is coming, ' .. line) 18.未定义的变量返回nil foo = anUnknownVariable -- 现在 foo = nil. -- 这不会出错 19.lua中的逻辑真,逻辑假 --只有nil和false是逻辑假,而其他所有都是逻辑真 if not aBoolValue then print('twas false') end 20.lua中的短路操作符:or 和and Lua提供的逻辑操作符有and、or和not。与条件控制语句一样,所有的逻辑操作符将false和nil视为假,而将其它的任何东西视为真。 对于操作符and来说,如果它的第一个操作数为假,就返回第一个操作数;不然就返回第二个操作数。 对于操作符or来说,如果它的第一个操作数为真,就返回第一个操作数;不然就返回第二个操作数。 这里和C++等语言是存在区别的,Lua的逻辑操作符并不是简单的返回true或false,而是返回操作数的值。例如以下代码: 21.for循环中的范围包括两端: karlSum = 0 22.for循环中表示递减的范围: fredSum = 0 end --其中-1表示递减 -- 通常,范围表达式为begin, end [, step]. --[]表示step是可选的参数 23.另一种循环的方式:使用repeat关键字修饰: repeat 24.lua中的函数: function fib(n) end 25.支持闭包及匿名函数,有点相当于函数的嵌套调用: function adder(x) -- 调用adder时,会创建用于返回的函数,并且能记住变量x的值: return function (y) return x + y end end a1 = adder(9) 26.函数的返回值个数: -- 返回值、函数调用和赋值都可以使用长度不匹配的list。 -- 不匹配的接收方会被赋为nil; -- 不匹配的发送方会被忽略。 x, y, z = 1, 2, 3, 4 -- 现在x = 1, y = 2, z = 3, 而 4 会被丢弃。 function bar(a, b, c) print(a, b, c) return 4, 8, 15, 16, 23, 42 end x, y = bar('zaphod') --> prints "zaphod nil nil" 27.函数是一等公民,可以是全局的也可以是局部的: -- 下面是等价的: -- 这些也是等价的: local function g(x) return math.sin(x) end local g; g = function (x) return math.sin(x) end -- 'local g'可以支持g自引用。 -- 顺便提一下,三角函数是以弧度为单位的。 28.用一个字符串参数调用函数,不需要括号: print 'hello' --可以工作,也可以写成 print('hello') --即用字符串做函数参数时,可以省略括号 29.lua中唯一的数据结构:table --在lua中,table就是数组和集合的混合物(这也是为什么table如此强大的原因)。 --具体的用法可以参考我的文章,lua中table的用法,因为lua实在是太多内容了 30.元表(metatable) 和元方法(metamethod)。 -- table的元表提供了一种机制,可以重定义table的一些操作。 f1 = {a = 1, b = 2} -- 定义了两个table f2 = {a = 2, b = 3} -- 这个是错误的: -- s = f1 + f2 ,两个table不能直接相加 --元表对应的英文是metatable,元方法是metamethod。我们都知道,在C++中,两个类是无法直接相加的,但是,如果你重载了“+”符号,就可以进行类的加法运算。 --在Lua中也有这个道理,两个table类型的变量,你是无法直接进行“+”操作的,如果你定义了一个指定的函数,就可以进行了。
|
请发表评论