31 October 2017
Lua 是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发。

Linux 系统上安装

curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz
tar zxf lua-5.3.0.tar.gz
cd lua-5.3.0
make linux test
make install

Mac OS X 系统上安装

curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz
tar zxf lua-5.3.0.tar.gz
cd lua-5.3.0
make macosx test
make install

运行方式

1.交互式编程

Lua 交互式编程模式可以通过命令 lua -i 或 lua 来启用:
$ lua -i 
$ Lua 5.3.0  Copyright (C) 1994-2015 Lua.org, PUC-Rio

> print("Hello World!")
Hello World!
>

2.脚本编程

hello.lua 的脚本文件中:
print("Hello World!")
print("www.runoob.com")

运行:
$ lua test.lua

Hello World!
www.runoob.com

3.将代码修改为如下形式来执行脚本

#!/usr/local/bin/lua

print("Hello World!")
print("www.runoob.com")

运行:

./test.lua 
Hello World!
www.runoob.com

变量

全局变量 : 在默认情况下,变量总是认为是全局的。
局部变量 : 格式 “local 变量名” 为局部变量。
变量的默认值均为 nil。

赋值语句

赋值是改变一个变量的值和改变表域的最基本的方法。

Lua可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量。

    demo:a, b = 10, 12     ---->       a=10; b=12

我们可以这样进行交换变量的值:

    x, y = y, x                     -- swap 'x' for 'y'
    a[i], a[j] = a[j], a[i]         -- swap 'a[i]' for 'a[j]'

当变量个数和值的个数不一致时,Lua会一直以变量个数为基础采取以下策略:

a. 变量个数 > 值的个数             按变量个数补足nil
b. 变量个数 < 值的个数             多余的值会被忽略

数据类型

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 中的表(table)其实是一个"关联数组"(associative arrays),数组的索引可以是数字或者是字符串。在 Lua 里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。

string类型


1.单双引号的字符串。

string1 = "this is string1"
string2 = 'this is string2'

2.用方括号 “[[]]” 来表示”一块”字符串。

html = [[
<html>
<head></head>
<body>
    <a href="http://www.ooob.com/">lua教程</a>
</body>
</html>
]]
print(html)

3.在对一个数字字符串上进行算术操作时,Lua 会尝试将这个数字字符串转成一个数字:

> print("2" + 6)
8.0
> print("2" + "6")
8.0
> print("2 + 6")
2 + 6

table类型

1.创建表

-- 创建一个空的 table
local tbl1 = {}
 
-- 直接初始表
local tbl2 = {"apple", "pear", "orange", "grape"}

2.Lua里表的默认初始索引一般以 1 开始.

-- table_test2.lua 脚本文件
local tbl = {"apple", "pear", "orange", "grape"}
for key, val in pairs(tbl) do
    print("Key", key)
end

脚本执行结果为:

$ lua table_test2.lua 
Key    1
Key    2
Key    3
Key    4

3.table 不会固定长度大小,有新数据添加时 table 长度会自动增长,没初始的 table 都是 nil。