在Windows上使用Lua
可以下载SciTE(菜鸟教程的镜像)或者LuaDist作为IDE来执行Lua程序。
暂且就使用SciTE学习Lua,在SciTE中编写代码后,保存为.lua
格式的文件,这个IDE不会自动加后缀,要手动加上,然后点击工具栏的蓝色Run Program(即F5
)就可以执行这个Lua脚本了。
在SciTE中每次执行不会清除上一次的结果,可以使用Shift+F5
手动清除输出。
可以在File->Encoding
将编码改成UTF-8
,不然会像以前用MinGW一样一个中文占两个字符,比较麻烦。但在运行时如果要输出中文,却还需要改回Code Page Property
,不然输出中文会变成乱码,这个问题暂时还没找到怎么解决。
八种基本数据类型
使用type()
可以查看变量的类型。如:
a=1
print(type(a))
输出:
number
nil
这个类型表示无效值,当一个变量值为nil
时相当于这个变量未赋值,对于全局变量和table
类型的变量值为nil
时相当于不存在。
nil
用作比较时应加上双引号,即使用"nil"
。
boolean
和Java一样,值为true
或false
。
number
这个类似JS,Lua也只有number
这一种数字类型,相当于其它编程语言的double
类型。
string
可以用单引号或者双引号来表示其中的内容是字符串,也可以用双方括号[[...]]
表示其中的一块内容是字符串。如:
a=[[
啊啊啊啊
Lua啊啊啊
上面空了一行
]]
print(a)
输出:
啊啊啊啊
Lua啊啊啊
上面空了一行
类似于PHP中使用.
来并置字符串,Lua中使用..
来并置字符串。如:
a=12 .. 34
print(a)
print(a .. "ok")
输出:
1234
1234ok
Lua中使用#
前置符号来计算字符串的长度。如:
print(#"abcd")
a='123'
print(#a)
输出:
4
3
table
Lua中的table
类似于PHP中的数组,key默认是下标(不过Lua的下标从1开始,而不是0),同时key也可以是数字或者字符串。例如:
myTbl={"lzh","is",21,"years old"}
--遍历这个table
for k,v in pairs(myTbl) do
print(k .. ":" .. v)
end
--修改table中的某项
myTbl[2]='isn\'t'
--在table中添加一项
myTbl['sex']="male"
--再遍历看看
print()
for k,v in pairs(myTbl) do
print(k .. ":" .. v)
end
输出:
1:lzh
2:is
3:21
4:years old
1:lzh
2:isn't
3:21
4:years old
sex:male
删除元素只要将对应key的value设置成nil
,如:
myTbl={"lzh","is",21,"years old"}
--从table中删除元素
myTbl[2]=nil
--遍历table啊
for k,v in pairs(myTbl) do
print(k .. ":" .. v)
end
输出:
1:lzh
3:21
4:years old
function
Lua中的函数可以当做变量使用。如:
--普通的函数
function sayHello(name)
print("你好,"..name)
end
--赋值给另一个变量
sayHello2=sayHello
--从赋值后的变量调用
sayHello2("lzh")
可以像使用常量传参那样传递一个匿名函数。如:
--传入一个函数和参数,调用之
function callFun(fun1,a)
fun1(a)
end
--传入匿名函数,就像传入了一个常量一样
callFun(
function(name)
print("再见,"..name)
end
,
"刘知昊"
);
输出:
再见,刘知昊
thread(其实是coroutine)
这里的thread
应该翻译成协同程序,它和线程比较类似,但并不是线程,然而Lua里对这个数据类型取type()
得到的却是thread
这个词。如:
--创建一个协同程序,传入一个函数
--返回一个thread类型的变量
co = coroutine.create(
function(name)
print("你好"..name);
end
);
--运行指定的协同程序
coroutine.resume(co,"LZH")
--输出类型看一下
print(type(co))
输出:
你好LZH
thread
userdata
userdata
表示用户自定义的数据类型,可以将C/C++中建立的数据类型存到Lua变量中使用,具体怎么用还没搞清楚。