lua 基本语法
基本语法
注释
-- single line comment
--[[
mutil line comments
]]
关键词
变量名避免与以下关键词重复。
and | break | do | else | elseif | end | false | for |
---|---|---|---|---|---|---|---|
function | if | in | local | nil | not | or | repeat |
return | then | true | until | while | goto |
变量
默认情况下,变量总是 全局变量 , 局部变量需要使用 local
标记。
a = 1 -- global value
local b = 2 -- local value
function test()
c = 3 -- global value
local d = 4 -- local value
end
Lua 的变量与 Python 一样也是弱类型,无需明确指定数据类型,Lua解释器自动识别或转换。
数据类型
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)其实是一个"关联数组"(associative arrays),数组的索引可以是数字、字符串或表类型。在Lua
里,table 的创建是通过"构造表达式"来完成,最简单构造表达式是{},用来创建一个空表。
table 在 Lua 几乎是万能的,随处可见,可实现类似数组、字典、类C语言的结构体、面向对象相关等。
nil
有点类似C语言的 NULL
或者 void
,在逻辑判断中需要加双引号,并且其值等价于 false
.
值得注意的是,Lua 中的 0 并不代表 false, 这是与绝大多数编程语言不一样的地方。
运算符
算术运算符
+
加法-
减法*
乘法/
除法%
取余^
乘幂-
负号
关系运算符
==
等于~=
不等于>
大于<
小于>=
大于等于<=
小于等于
逻辑运算符
and
与or
或not
非
其它运算符
..
连接字符串#
返回字符串或表的长度,如 #"Hello" 返回 5
循环
while 循环
while (codition)
do
statements
end
注意与shell不同,lua 是以 end
结束,不是 done
。while 例程如下:
i=10
while (i > 0)
do
print ("i:", i)
i = i-1
end
for 循环
- 数值循环
for var=exp1,exp2,exp3 do
statements
end
var
从 exp1 以 exp3 为步进,逐渐变化到exp2, 类似C语言中的
for (var = exp1; var < exp2; var += exp3) {
statements
}
lua 数值 for 循环例程
for var=1,10,2 do
print(var)
end
- 泛型循环
lua 还有另外一种for循环,被称为 泛型 for 循环。与 Python 很像,就是迭代输出。
a = {"one", "two", "three"}
for i, v in ipairs(a) do
print(i, v) -- i: index, v: value
end
repeat...until 循环
repeat
statements
until( condition )
乍一看和 C 的 do...while
很像,但实际不一样, do...while
是当 while 条件满足时执行,而 repeat...until
则相反,当until
条件不满足时执行。其实 lua 的也很好理解,不断重复 (repeat) 某件事直到 (until) 满足某个条件才停止。思想是差不多的。
实例如下:
i = 1
repeat
print("i:", i)
i = i + 1
until( i > 10 )
条件判断
if (condition)
then
statements
end
if (condition-1)
then
statements-1
elseif (condition-2)
then
statements-2
else
statements-3
end
if elseif else 例程
a = 1
if( a == 1 )
then
print("a is 1" )
elseif( a == 2 )
then
print("a is 2" )
elseif( a == 3 )
then
print("a is 3" )
else
print("not found a" )
end
函数
optional_function_scope function function_name( argument1, argument2, argument3..., argumentn)
function_body
return result_params_comma_separated
end
optional_function_scope
: 该参数是可选的,指定函数是全局函数还是局部函数,未设置该参数默认为全局函数,如果你需要设置函数为局部函数需要使用关键字 local。function_name
: 指定函数名称。argument1, argument2, argument3..., argumentn
: 函数参数,多个参数以逗号隔开,函数也可以不带参数。function_body
: 函数体,函数中需要执行的代码语句块。result_params_comma_separated
: 函数返回值,Lua语言函数可以返回多个值,每个值以逗号隔开。
例程
function add(a, b)
return a + b;
end
print(add(1,2))
多返回值
lua 的函数可以返回多值,比如在一个数组中找到最大值及其所在位置。
function maximum (a)
local mi = 1 -- max index
local m = a[mi] -- max value
for i,val in ipairs(a) do
if val > m then
mi = i
m = val
end
end
return m, mi
end
print(maximum({2,12,22,14,8}))
可变参数
和C类似,lua也支持可变参数,使用 ...
代表可变参数。
function add(...)
local s = 0
for i, v in ipairs{...} do --/* {...} is a array */
s = s + v
end
return s
end
print(add(1,2,3,4,5,6))
执行系统指令
- os.execute
os.execute('date')
os.execute('ls')
- io.popen
fd = io.popen('date')
out = fd:read("*all")
fd:close()
print(out)
io.popen
需要 lua 在编译时启用LUA_USE_LINUX
这个宏,否则不会支持。
参考文档
版权声明:本博客所有文章除特殊声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明出处 litreily的博客!