在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一样,值为truefalse

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变量中使用,具体怎么用还没搞清楚。