Lua chapter 3
时间:2014-05-10 10:17:39
收藏:0
阅读:272
1. 交换两个数值
x, y = y, x; //等价于 x = y, y =x;
2. 变量初始化问题
a, b, c = 0;
print(a,b,c); --> 0 nil nil
仅对第一个值复制,所以要初始化一组变量,应该提供多个初始值
a, b, c = 0, 0, 0;
print(a, b, c); --> 0 0 0
3. "尽可能地使用局部变量",这是一种良好的编程风格,
1)访问局部变量比全局更快
2)局部变量随作用域结束而消失,这样垃圾收集器便可释放其值
4. do - end; 可以显示地定义一个代码块,相当于"{...}";
5. Lua中的一种习惯写法:
local foo = foo; 全局赋值局部,加快当前作用域中对foo的访问
6. 控制结构
a = 10;
if a>0 then
print(">0");
else
print("<0");
end;
local i=10;
while i>0 do
print(i);
i = i -1;
end;
-- repeat 至少执行一次
repeat
line = io.read();
until line =="";
print(line);
7. for 循环:数字型 和 泛型
数字型: for var = exp1, exp2, exp3 do ... end
var 从 exp1 到 exp2 ,步长为 exp3 (可选,默认为1)
不想给循环设置上限的话,可以使用常量 math.huge
细节:for 的3个表达式仅在循环前执行一次,其次,控制变量会被自动声明为局部变量,循环结束不再可见
for i=1, math.huge do
if (i>100) then
print(i);
end;
end;
泛型for 的简单示例
-- ipairs 打印数组a的所有值
a={"Sun","Mon"};
for i,v in ipairs(a) do
print(v);
end;
-- i是索引值,v是i对应的元素值
-- pairs 打印key
for k in pairs(a) do
print(k);
end;
Lua的几种常用迭代器
迭代文件中每行的 io.lines
迭代table元素的 pairs
迭代数组元素的 ipairs
迭代字符串中单词的 string.gmatch 等等
-- for 的简单应用示例
days = {"Sun","Mon","Tue","Wed"};
现在要将一个名称转换为它在一周中的位置,一个有效的方法是创建一个 "逆向table",
普通做法是:
revDays = {["Sun"]=1, ["Mon"]=2, ["Tue"=3]...};
可以这样自动构造一个逆向table,
revDays = {};
for k,v in pairs(days) do
revDays[v] = k;
end;
x, y = y, x; //等价于 x = y, y =x;
2. 变量初始化问题
a, b, c = 0;
print(a,b,c); --> 0 nil nil
仅对第一个值复制,所以要初始化一组变量,应该提供多个初始值
a, b, c = 0, 0, 0;
print(a, b, c); --> 0 0 0
3. "尽可能地使用局部变量",这是一种良好的编程风格,
1)访问局部变量比全局更快
2)局部变量随作用域结束而消失,这样垃圾收集器便可释放其值
4. do - end; 可以显示地定义一个代码块,相当于"{...}";
5. Lua中的一种习惯写法:
local foo = foo; 全局赋值局部,加快当前作用域中对foo的访问
6. 控制结构
a = 10;
if a>0 then
print(">0");
else
print("<0");
end;
local i=10;
while i>0 do
print(i);
i = i -1;
end;
-- repeat 至少执行一次
repeat
line = io.read();
until line =="";
print(line);
7. for 循环:数字型 和 泛型
数字型: for var = exp1, exp2, exp3 do ... end
var 从 exp1 到 exp2 ,步长为 exp3 (可选,默认为1)
不想给循环设置上限的话,可以使用常量 math.huge
细节:for 的3个表达式仅在循环前执行一次,其次,控制变量会被自动声明为局部变量,循环结束不再可见
for i=1, math.huge do
if (i>100) then
print(i);
end;
end;
泛型for 的简单示例
-- ipairs 打印数组a的所有值
a={"Sun","Mon"};
for i,v in ipairs(a) do
print(v);
end;
-- i是索引值,v是i对应的元素值
-- pairs 打印key
for k in pairs(a) do
print(k);
end;
Lua的几种常用迭代器
迭代文件中每行的 io.lines
迭代table元素的 pairs
迭代数组元素的 ipairs
迭代字符串中单词的 string.gmatch 等等
-- for 的简单应用示例
days = {"Sun","Mon","Tue","Wed"};
现在要将一个名称转换为它在一周中的位置,一个有效的方法是创建一个 "逆向table",
普通做法是:
revDays = {["Sun"]=1, ["Mon"]=2, ["Tue"=3]...};
可以这样自动构造一个逆向table,
revDays = {};
for k,v in pairs(days) do
revDays[v] = k;
end;
8. 可以使用 break 或是 return 来结束当前的循环
评论(0)