本文介绍Lua的基本知识,面向有编程基础的读者。
Lua是什么?
Lua是一个高速、灵活、简单、易学的嵌入式语言。你可以在这里下载Lua。
REPL
在命令行下输入lua
即可运行Lua的REPL,非常方便:
; lua
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
> x = 0
> while x < 10 do
>> x = x + 2
>> print(x)
>> end
2
4
6
8
10
> return x
10
>
语法
--[[
多行
注释
]]
if state == 5 then
doSomething() -- 单行注释
elseif foo then
a = true
else
b = false
end
上面是一个小例子。Lua不用分号,也不用花括号,而是使用then
、do
之类的语句。上面的代码也展示了条件语句。
变量
直接var = value
即可,无需声明变量类型。默认全局变量。你可以一次赋值多个变量:var1, var2, var3 = val1, val2, val3
.
-
nil
表示“无”,包括未定义的变量。ActionScript之类的语言有null
和undefined
,Lua将两者合并为nil
。 - 只有
nil
和false
为假,其他值均为真。
运算符
Lua具有大多数标准的运算符,以下按优先级由低到高排列:
or
and
< > <= >= ~= ==
..
+ -
* / %
not # - (unary)
^
和C有些不一样:
- 逻辑运算符
AND
、OR
、NOT
换成and
、or
、not
。 - 不等号为
~=
而不是!=
。 -
..
连接字符串。 -
^
指数运算,例如10 ^ 2
输出100
,大多数语言中,^
表示XOR。 -
#
获取长度。
如果你在思量位运算符在哪里?答案是没有。不过 Lua 5.2增加了 bit32
库。
注意:
- 不支持
+=
和++
。 - 赋值语句不会返回所赋的值,所以
foo(a = 3)
和a = b = 1
导致语法错误。
循环
while
i = 1
while i <= 5 do
i = i + 1
print(i)
end
传统的while
循环。
repeat
i = 5
repeat
i = i - 1
print(i)
until i == 1
这种情况下,循环体至少运行一次。
for
x = 1
for i = 1, 11, 2 do
x = x * i
print(x)
end
格式如下:
for var = start, limit, step do
-- code here
end
等价于如下的while
循环:
var = start
while var <= limit do
-- code here
var = var + step
end
C语言中类似的循环是这样的:
for (int var = start; var <= limit; var += step) {}
step
可以是负数,反过来循环。
循环的终止
使用break
关键字:
while true do
if condition then
x = x ^ 2
else
break
end
end
Lua没有continue
关键字。
函数
function foo()
local x, y = something(4, 5)
return x ^ y
end
function something(arg1, arg2)
local ret1 = (arg1 * arg2) ^ 2
local ret2 = (arg1 - arg2) ^ 2
return ret1 + ret2, ret1 * ret2
end
上面的代码说明定义函数的先后顺序没有关系,这和C、C++等编译型语言不同。
我想指出的是:
- 局部变量需要使用
local
关键声明。 - 函数可以返回多个值。
- 不直接支持参数的默认值。
下一步:《Lua数据结构与标准库简介》
原文 Lua for Programmers Part 1: Language Essentials
翻译 Segmentfault
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。