开发环境
1.Script.Net提供了Lua的开发和调试的功能,
http://www.blueantstudio.net/scriptnet/download/download.htm
2.Eclipse LUA(LDT)提供了Lua的开发和调试的功能,以及基本的代码提示
http://www.eclipse.org/koneki/ldt/#installation
注释
- --表示单行注释,类似Java的//
- --[[多行注释]], 类似Java的/**/
赋值运算
local function main() --[[ 复制运算符: = ]] a=1 x,y,z=1,2,3 m=3 n=4 m,n=n,m --m,n数值交换 print(a,x,y,z,m,n) --输出1 1 2 3 4 3 end main()
算术运算
local function main() --[[ 1. 数值运算符+ , -, *, /(除法运算,浮点除法), ^(乘方运算) ]] a = 4 b= 7 print (a+b, a-b, a*b, a/b, a^b) --输出11 -3 28 0.57142857142857 16384 end main()
比较运算
local function main() --[[ 1.比较运算符:<, <=, ==, >=, >,~= 2.对于引用类型的数据,比如Table,Function或者UserObject,只有==和~=可以用,此时的==表示对象的引用一样 ]] print(1 < 2); print(1 <= 2); print(1 == 2); print(1 ~= 2); print(1 > 2); print(1 >= 2); print(nil ~= nil) --输出false,所以false等于false print(false == false) --输出true print(true == true)--输出true a={1,2} b={1,2} print(a==b, a~=b)---输出false true a=b print(a==b, a~=b)---输出true false end main()
逻辑运算
local function main() --[[ 逻辑运算符:and, or, not 1. a and b a为false则返回a,否则返回b 2. a or b a为true返回a,否则返回b 3. 只有false和nil为false,其余值均为true 4. not a, a为false值则返回true,a为true值则返回false ]] print( 1 and 2) --输出2 print(1 or 2)--输出1 print(not nil) --输出true print(not false) --输出true print(not true) --输出false print(not 1) --输出false end main()
Lua语言关键字(字母排序)
and break do else elseif end false for function if in local nil not or repeat return then true until while
Lua语言数据类型
local function main() a = 1; b = "msn"; c = 1.3 d = {1, 2}; e = 1 > 2; f = math.sin; g = {lang="LUA"} g.lang="Lua" print(type(a),type(b),type(c),type(d),type(e),type(f),type(g)) --输出number string number table boolean function table --[[ 还有其他类型 function --函数类型,意思是说,Lua的每个函数都是变量 userdata --该类型用于Lua跟宿主语言打交道 thread --Lua没有真正的线程,不过一个函数可以分成几部分执行 ]] end main()
Table变量和函数变量定义
local function main() --变量多重赋值 a, b, c = 1, 2, 3 --[[Table,关系表类型,可以看成是数组,也可以看成Map 1.键值可以不是数字,可以是字符串 2.数值类型不一定类型完全一样, 3.如果是以数字索引,那么从开始 ]] --[[下面的语句输出 value1 value2 value3 value1 value2 value3 nil nil nil ]] data = {key1="value1", key2="value2", key3=123}; print(data.key1,data.key2,data.key3) print(data["key1"],data["key2"],data["key3"]) print(data[0],data[1],data[2]) --不是下标语法 --------------------------------------------------------------- --[[ 二维数据表 Table = {} Table.lang = {"Java","Lua"} ]] t={} t.lang = {"Java", "Lua"}; print(t.lang[1], t.lang[2]); --下标从1开始,Java Lua --[[ 函数定义 ]] function add(a, b) return a + b; end --等价于上面的函数定义 func=function(a,b) return a+b; end print(add(6,7)) --输出13 end main()
for循环
local function main() --[[ for (i=1,10) do print print end for(i=迭代初值,迭代最终值) do --loop body --each iteration, i increments by 1 by default end for(i=迭代初值,迭代最终值, 步幅) do --loop body --each iteration, i increments by 步幅(如果步幅为正) by default end ]] for i=1,10 do --for和do之间没有括号 print(i) --do和end定义循环体 print(i) end for i=1,10,3 do --for和do之间没有括号 print(i) --do和end定义循环体,输出1,4,7,10 end end main()
Lua OOP特性之封装
local function main() --使用Lua的Table数据类型可以将数据和函数封装到一起,这跟Javascript的语言的对象封装特性类似 --定义Person类 Person = {}; Person.age=13; Person.setAge=function(age) Person.age=age; --这里不能使用this.age=age end Person.getAge=function() return Person.age;--这里不能使用return this.age end --调用p的getAge方法 print(Person.getAge()) end main()
上面的代码比较Ugly,因为自始至终都是使用Person来进行操作,是否应该有this语法,如下面的函数定义
Person.setAge=function(age) this.age=age; --this指向调用setAge方法的对象本身 end
Lua提供了self这个特殊参数,用于在函数体中引用对象本身,但是必须使用:用来声明函数?
Cat = {age=2} function Cat:eat() --必须使用:语法?改为Cat.eat=function则报错 print ("I am eat..I am ".. self.age.. " years old") --self类似于Java的this对象 end function Cat:setAge() self.age = 10; end Cat:eat(); --输出I am eat..I am 2 years old
Lua的OOP特性之继承
local function main() --定义Animal类,有两个属性和两个方法getName,getAge Animal={name="Unknown", age=1}; function Animal:getName() return self.name; end function Animal:getAge() return self.age; end function Animal:setName(name) self.name = name; end function Animal:setAge(age) self.age = age; end --定义一个类Cat Cat={color="Yellow"}; function Cat:getColor() return self.color; end --将Cat设置为Animal的子类 setmetatable(Cat, {__index = Animal}) --设置Cat的name和age Cat:setName("HelloKitty"); Cat:setAge(11); --打印Cat的name,age和color print(Cat:getName()..'\t'..Cat:getAge()..'\t'..Cat:getColor()); end main()
继承实现的另一种方式是将设置元数据表操作封装到一个函数中,
Lua的OOP特性之多态(函数覆写)
下面的例子覆写了父类的setName方法
local function main() --定义Animal类,有两个属性和两个方法getName,getAge Animal={name="Unknown", age=1}; function Animal:getName() return self.name; end function Animal:getAge() return self.age; end function Animal:setName(name) self.name = name; end function Animal:setAge(age) self.age = age; end --定义一个类Cat Cat={color="Yellow"}; function Cat:getColor() return self.color; end function Cat:setName(name) --覆写父类的setName方法 self.name = name .. ".Cat"; end --将Cat设置为Animal的子类 setmetatable(Cat, {__index = Animal}) --设置Cat的name和age Cat:setName("HelloKitty"); Cat:setAge(11); --打印Cat的name,age和color print(Cat:getName()..'\t'..Cat:getAge()..'\t'..Cat:getColor()); end main()
源代码:
相关推荐
Lua 语言的基本入门
unity热更新 lua 方案语法基础;热更新是指在不停机的状态下对系统进行更新,例如Windows可以在不重启的状态下完成补丁的更新、Web服务器在不重启的前提下完成对数据和文件的替换等都是热更新的经典实例。
Lua游戏脚本语言入门
Lua安装程序,《Programming in Lua》
提供脚本语言学习者一个中文文档,该文档全面讲述了Lua的基本特性和如何使用
Programming In Lua(Lua 脚本语言入门教程 中文版).pdf
深入浅出Lua学习
Lua 编程入门教程。Lua一种脚本语言,是C语言扩展功能利器。
共八本: Lua程序设计(第二版);LUA脚本语言参考文档;Lua脚本语言中文教程;Lua性能优化技巧;Lua虚拟机指令集介绍;lua源码剖析;Lua源码赏析;使用notepad 运行python和lua的配置
Lua游戏脚本语言入门.doc
LUA脚本语言学习教程。供初学LUA脚本语言的入门者使用。
Lua入门、luarefv51single及脚本语言说明
lua语言入门编程作业,分别用循环语句、一维和二维数组存储,比较简单的代码,供初学者参考,大神请绕行
在这篇文章中,向大家介绍如何进行Lua程序设计。假设大家都学过至少一门编程语言,比如Basic或C,特别是C。因为Lua的最大用途是在宿主程序中作为脚本使用的。
Lua脚本语言中文教程.pdf Lua入门到精通 入门到精通。。
lua教程, 包含入门手册以及PPT讲解
NULL 博文链接:https://hypercube.iteye.com/blog/2170663
自己整理修改的:Lua脚本语言入门篇.doc,希望对有需要的人有些用~