学习原因:
Lua 是一个小巧的脚本语言
其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,
几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。
所以Lua不适合作为开发独立应用程序的语言。
Lua 有一个同时进行的JIT项目,提供在特定平台上的即时编译功能。
不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,ini等文件格式,并且更容易理解和维护。
一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。
既然这么有用、那么就很有必要学习它了。。那么现在就启程吧。
学习一门语言,最终的目的就是为了使用、而最快学习一门语言最好的方法也同样,所以则专注于如何使用它:
测试环境:eclipse 自安装lua插件,可直接建立 Lua Project 在PC上直接运行看结果,以下所有例子都在Lua5.1版本运行通过,可以放心copy即运行看结果。
1、函数的使用
-- functions
function pythagorean(a, b)
local c2 = a^2 + b^2
return sqrt(c2)
end
print(pythagorean(3,4))
运行结果: 5
在Lua中函数的定义格式为:
function 函数名(参数)
...
end --只需要在函数结束后打个end就可以了
2、循环语句
-- Loops
for i=1,5 do
print("i is now " .. i) -- 用到了.. 这是用来连接两个字符串
end
运行结果
i is now 1
i is now 2
i is now 3
i is now 4
i is now 5
在Lua中函数的定义格式为:
for 变量 = 参数1, 参数2, 参数3 do
循环体
end -- 变量将以参数3为步长, 由参数1变化到参数2
3、条件分支语句
-- Loops and conditionals
for i=1,5 do
print("i is now " .. i)
if i < 2 then
print("small")
elseif i < 4 then
print("medium")
else
print("big")
end
end
运行结果
i is now 1
small
i is now 2
medium
i is now 3
medium
i is now 4
big
i is now 5
big
if else用法比较简单, 类似于C语言, 不过此处需要注意的是整个if只需要一个end
5、lua数据结构
Lua语言只有一种基本数据结构, 那就是table, 所有其他数据结构如数组,类等都可以由table实现
-- Arrays
myData = {}
myData[0] = "foo"
myData[1] = 42
-- Hash tables
myData["bar"] = "baz"
-- Iterate through the structure
for key, value in pairs(myData) do
print(key .. "=" .. value)
end
输出结果
0=foo
1=42
bar=baz
Table的嵌套
-- Table ‘constructor’
myPolygon = {
color="blue",
thickness=2,
npoints=4;
-- 这其实就是一个小table, 定义在了大table之内, 小table的 table名省略了
{x=0, y=0},
{x=-10, y=0},
{x=-5, y=4},
{x=0, y=4}
}
-- Print the color
print(myPolygon["color"])
-- Print it again using dot notation
print(myPolygon.color)
-- The points are accessible
-- in myPolygon[1] to myPolygon[4]
-- Print the second point’s x coordinate
print(myPolygon[2].x)
输出结果
blue
blue
-10
6、函数的调用
a、不定参数
-- Functions can take a variable number of arguments.
function funky_print (...)
for i=1, arg.n do
print("FuNkY: " .. arg[i])
end
end
funky_print("one", "two")
输出结果
FuNkY: one
FuNkY: two
* 如果以...为参数, 则表示参数的数量不定.
* 参数将会自动存储到一个叫arg的table中.
* arg.n中存放参数的个数. arg[]加下标就可以遍历所有的参数.
b、以table做为参数
-- Functions with table parameters
function print_contents(t)
for k,v in pairs(t) do -- for k,v in t do 这个语句是对table中的所有值遍历, k中存放名称, v中存放值
print(k .. "=" .. v)
end
end
print_contents{x=10, y=20}
输出结果
y=20
x=10