Hello world
-- test.lua
function fact(n)
if n==0 then
return 1;
else
return n*fact(n-1);
end
end
print("Hello, World!");
a=io.read("*number");
print(fact(a));
- 交互模式
- 注释
- 行注释:--
- 块注释:--[[开始 …..结束]] ,常用--[[ …. --]] 或--[=[ …]] …]=](之间可以加任意数量的等号)
- 全局变量
- 初始值为nil
- 若要删除只需赋予nil值就行
- 解释器程序
- 下载地址:http://www.lua.org
- lua [选项参数] [脚本参数]
- 选项参数-e直接输入代码
- -l 加载库文件
- -i 运行完后进入交互模式
lua -i –l a –e "x=10"
- 可以直接打印任何表达式的值,以等号开头
- 解释器执行参数之前,会先查找一个名为LUA_INIT的环境。
- 若找到,且LUA_INIT=@文件名,则会先执行此文件。
- 若找到,但没以@开头,则将LUA_INIT=变量
- 命令行参数
lua –e "sin=math.sin" script a b
arg[1]=="a"
arg[2]=="b"
类型与值
8种基础类型:nil、boolean、number、string、userdata、function、thread、table。
判断类型名称使用type,返回的是字符串
- nil
空
- boolean
- true和false
- 在条件测试中,把数字0和空字符串也视为真
- number
- 以浮点数进行运算。4、4.4、 4.55e-3、0.3e12、5e+20
- 若要以整数进行运算,需重新编译lua。详见luaconf.h
- string
- 字符串不可修改,要修改需重新创建
a="one aa";
b=string.gsub(a,"one","two");
print(a) --输出one aa
print(b)--输出two aa
- 转义序列
- \f、 \n、 \r 、\t、 \\ 、\"、 \'等
- \ddd 如\097
\a --- bell
\b --- backspace
\f --- form feed
\n --- newline
\r --- carriage return
\t --- horizontal tab
\v --- vertical tab
\\ --- backslash
\" --- quotation mark
\' --- apostrophe
\[ --- left square bracket
\] --- right square bracket
\ddd ===> 转义成 ddd 对应的字符。比如 print("\65") ===> A
- 块字符串
- 使用[[ … ]]
page=[[
<html>
…
</html>
]]
- 在[中加任意数量的等号,如[=[ … ]=]
page=[===[
<html>
[[…]]
</html>
]===]
- 字符串转整数
local szDigital = "123456";
local nResult = szDigital + 333;
-- 结果是 nResult 是 123789
- 建议最好使用tonumber(…)
local line = io.read();
local n=tonumber(line);
if nil==n then
error(line.."is not a valid number");
else
print(n*3);
end
- 字符串连接(整数转字符串)
local nItemType = 123;
local szItemType = "aa" .. nItemType;
-- 结果是 szItemType 是 "aa123"
- 建议最好使用tostring(…)
print(tostring(10) == "10") àtrue
print(10 == "10") àfalse
获得字符串长度#
local a="hello";
print(#a); -->5
- table
table没有大小,可以任意地添加。
1、数组定义:
local array = { 1, 2, 3, 4 };
local array2 = {
{ 1, 2, 3 },
{ 2, 3, 4 }
};
2、数组使用:
a = array[1];
b = array2[1][3];
3、注意:数组的下标是1基的。也就是array是从1~4。
4、local size = table.getn(array) --这样可以取到表的长度为4(需要lua_tablibopen库支持)
5、数组元素的最后一个值后面,可以多加一个逗号(,)。例如:local array = { 1, 2, 3, 4, };
local a={};
a["10"]=10;
a[10]="abc";
a["abc10"]=a["10"]..a[10];
local b=a;
print(b["10"]); à10
a=nil;
print(b["10"]); à10
b=nil;
local a={};
a["aa"]=10;
print(a.aa); à10
b="bb";
a[b]=20;
print(a[b]); à20
print(a.b);ànil
print(a.bb);à20
注意:lua将nil作为数组结尾,所以应避免使用#。如果真的要使用含有nil的数组,可以使用table.maxn()
a={};
a[100]=1;
print(table.maxn(a)); à100
print(#a); à0
- function
注意:内部变量必须用"local "来限定,否则会被LUA当成"全局变量"。
- userdata
- thread
表达式
- if表达式
if (条件) then
语句1;
语句2;
end
if (条件) then
语句1;
语句2;
else
语句3;
end
if (条件) then
语句1;
语句2;
elseif (条件) then
语句3;
end
- "条件"的写法:
if (a > b and c < d) then -- && !
if (a <= b or c >= d) then
if (not (a == a)) then
if (a ~= b) then -- 不等于
注意:除"nil"与bool类型的"false"以外, 一切数字与字符串(包括0与空串)都是true。
如果想判断一个值是不是C++意义上的TRUE,可写成:
if (a ~= 0) then
- 循环
1、普通for循环
for i=1,10 do
print(i)
end
2、递减的for循环
for i=10,1,-1 do
print(i)
end
3、注意:for语句中的 i 是local型的局部变量,仅在"for循环内部"有效。 !
注意:在循环中不要去修改控制变量 i 。 !
注意:如果在条件部分(for和do之间)有函数调用,这些函数只会调用一次。
- while循环及break调用
local i = 1
while a[i] do
if a[i] == v then break end
i = i + 1
end