注释
-- 单行注释 --[[ 多行注释 ]] -- 等号数量只要两边一致便可 --[=[多行注释]=]
标识符
A-Z、a-z、下划线_开头后加上0个或多个字母、下划线、数字(0-9)数组
注意:最好不要使用下划线加大写字母,Lua保留字也是如此数据结构
不容许特殊字符@、$、%定义标识符函数
区分大小写测试
关键词
-- Lua的保留关键字 and break do else elseif end false for function if in local nil not or repeat return then true until while -- 通常约定,如下划线开头链接一串大写字母的名字(如_VERSION)被保留用于Lua内部全局变量 _VERSION
全局变量
--[[ 默认状况下变量认为是全局的,不须要声明,赋值后即建立了这个全局变量,访问一个没有初始化的全局变量不会出错,会返回nil --]] print(b) -- 返回nil b=10 print(b) -- 返回10 -- 若是要删除一个全局变量,只须要将变量赋值为nil b=nil print(b) -- 返回nil
数据类型
-- Lua是动态类型语言,不须要定义,只须要赋值。值能够储存在变量中,做为参数传递或结果返回 -- 8个基本类型nil、boolean、number、string、userdata、function、thread、table --[[ nil 只有值nil属于该类,表示一个无效值(在条件表达式中至关于false) boolean 包含两个值:false和true number 双精度类型的实浮点数 string 字符串由一对双引号或单引号来表示 function 由C或Lua编写的函数 userdata 表示任意存储在变量中的C数据结构 thread 表示执行的独立线程,用于执行协程 table Lua中的表是一个“关联数组”,数组的索引能够是数字、字符串或表类型。在Lua里,table的建立时经过“构造表达式”来完成,最简单构造表达式是{},用来建立一个空表 ]] type() -- 该函数能够测试给定变量或者值得类型
nil(空)
-- nil类型表示没有任何有效值,它只有一个值nil print(type(a)) -- 输出nil -- 对于全局变量和table,nil有删除的做用 tab1={key1="val1",key2="val2","val3"} for k,v in pairs(tab1) do print(k .. " - " .. v) -- ..运算符用于链接字符串 end tab1.key1=nil for k,v in pairs(tab1) do print(k .. " - " .. v) end
boolean(布尔)
-- 只有两个可选值:false、true,Lua把false和nil看做是“假”,其余的都为真 if false or nil then print("至少有一个是true") else print("false和nil都为false!") end -- 执行结果为false和nil都为false!
number(数字)
-- Lua默认只有一种number类型 double(双精度)类型 print(type(2)) -- 输出number print(type(2e+1)) -- 输出number
string(字符串)
string1="this is string1" string2="this is string2" -- 也能够用两个方括号“[[]]”来表示“一块”字符串,输出时会将换行和制表等格式也输出 string3=[[ emmmmmmmmmm aaaaaaaaaaa ruaruaruaruarua! ]] -- 对一个数字字符串进行算术操做,Lua会尝试将这个数字字符串转成一个数字 print("2"+6) -- 输出8.0 print("-2e2"*"6") -- 输出-1200.0 -- 字符串链接使用..操做符,注意操做对象若是为数字,则操做对象与操做符之间须要加空格 print("2".."b") -- 输出2b print(233 .. 666) -- 输出233666 -- 使用#来计算字符串长度,放在字符串前面 len="www.rua.com" print(#len) -- 输出11 print(#"helloworld") -- 输出10
table(表)
-- 建立一个空表 local tbl1={} -- 直接初始表 local tbl2={"a","b","c","d"} -- 建立键值对 a["key"]="value" a[1]=22 key=10 -- 这里只是赋值,赋值后用于后面的建立键值对 a[key]=22 a[a[key]]=a[key]+11 -- 在Lua中,默认初始索引通常以1开始 local tb1={"a","b","c"} for key,val in pairs(tb1) do print("Key",key) end --[[ 输出: Key 1 Key 2 Key 3 ]] -- table的长度是动态增加的
function(函数)
-- 在Lua中,函数是被看做“第一类值(First-Class Value)”,函数能够存在变量里 function fun1(n) -- 一个递归求阶乘的函数 if n == 0 then return 1 else return n*fun1(n-1) end end print(fun1(5)) -- 输出120 fun2=fun1 print(fun2(5)) -- 输出120 -- 也能够使用匿名函数的形式 function testFun(tab,fun) for k,v in pairs(tab) do print(fun(k,v)) end end tab={kay1="val1",key2="val2"} testFun(tab, function(key,val) return key .. "=" .. val end ) --[[ 执行结果: key1=val1 key2=val2 ]]
thread(线程)
Lua中主要的线程是协程(coroutine)this
线程能够同时多个运行,协程任意时刻只能运行一个lua
userdata(自定义类型)
用户自定义数据,用于表示一种由应用程序或C/C++语言库所建立的类型,能够将任意C/C++的任意数据类型的数据(一般是struct和指针)存储到Lua变量中调用spa