首页 > 代码库 > Lua chapter 3
Lua chapter 3
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 来结束当前的循环
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。