Lua学习笔记 第四章 语句
2014-08-22 15:30
232 查看
4.1赋值
lua允许多重赋值,也就是将多个值赋予多个变量;每个值或每个变量之间以逗号分隔;
lua会将等号右边值的个数调整到与左边变量的个数相一致。如果值的个数少于变量的个数,多余的变量会被赋为nil;
若值得个数多余变量的个数,那么多余的值会被丢弃(先丢弃最右边的);
多重赋值中,lua会先对等号右边的所有元素求值,然后才执行赋值;这样便可以用一句多重赋值来交换两个变量的值了,
如: x,y = y,x
4.2局部变量与块
通过local来声明局部变量,局部变量的作用域仅限于声明它的那个块;
do--end可以显示的界定一个块;
程序中应尽可能的使用局部变量,因为局部变量可以避免将一些无用的名称引入全局环境,避免搞乱了全局环境;
访问局部变量比访问全局变量更快;
局部变量通常会随着其作用域的结束而消失,这样便使垃圾收集器可以释放其值;
lua中有一种习惯的写法是:
local foo = foo
这句代码创建了一个局部变量foo,并用全局变量foo的值初始化它;如果后续函数改变了全局foo的值,那么可以在
这里将全局变量foo的值保存起来;这种方式还可以加速在当前作用域中对foo的访问;
尽量少定义全局变量;局部变量的定义尽量遵循随用随定义的原则,尽可能地缩短变量的作用域;
4.3控制结构
控制结构中的条件表达式可以是任何值,lua将所有不是false和nil的值视为真;
if ... then ...
else/elseif ... end
while ... do ... end
repeat ... until ...
for 循环有数字型和泛型两种
数字型for
for var=exp1,exp2,exp3 do
<执行体>
end
var从exp1变化到exp2,每次变化都以exp3作为步长,并执行一次执行体;
第三个表达式exp3是可选的,若不指定默认步长为1;
for的三个表达式是在循环开始前一次性求值的;控制变量会被自动的声明为
for语句的局部变量,并且在循环体内可见,控制变量在循环结束后就不存在了;
不要在循环过程中修改控制变量的值,否则会导致不可预知的效果;
泛型for
泛型for通过迭代器函数来遍历所有值,如:
for k, v in ipairs(arr) do
print(v)
end
在lua的基础库中ipairs是一个用于遍历数组的迭代器函数;每次循环中k会被
赋予一个索引值,同时v被赋予一个对应于该索引的数组元素值;
通过不同的迭代器,泛型for几乎可以遍历任何东西;标准库中提供了几种迭代器,
迭代文件中每行的io.lines, 迭代table元素的pairs,迭代数组元素的ipairs,
迭代字符串中单词的string.gmatch.
泛型for和数字for的两个相同点: 循环变量是循环体的局部变量;
决不应该对循环变量作任何赋值;
4.4break 和 return
break和return语句用于跳出当前的块;
break语句用于结束一个循环,它只会跳出包含它的那个内部循环,而不会改变外层
的循环;
return语句用于从一个函数中返回一个结果,或者用于简单地结束一个函数的执行;
任何函数的结尾处都有一个隐式地return;如果一个函数没有值返回,那么它就无须
在其结尾处添加return语句;
由于语法构造的原因,break或return语句只能是一个块的最后一条语句;
如果希望在一个块的中间插入一条return或break,可以使用一个显式的do ... end
块来包住;
lua允许多重赋值,也就是将多个值赋予多个变量;每个值或每个变量之间以逗号分隔;
lua会将等号右边值的个数调整到与左边变量的个数相一致。如果值的个数少于变量的个数,多余的变量会被赋为nil;
若值得个数多余变量的个数,那么多余的值会被丢弃(先丢弃最右边的);
多重赋值中,lua会先对等号右边的所有元素求值,然后才执行赋值;这样便可以用一句多重赋值来交换两个变量的值了,
如: x,y = y,x
4.2局部变量与块
通过local来声明局部变量,局部变量的作用域仅限于声明它的那个块;
do--end可以显示的界定一个块;
程序中应尽可能的使用局部变量,因为局部变量可以避免将一些无用的名称引入全局环境,避免搞乱了全局环境;
访问局部变量比访问全局变量更快;
局部变量通常会随着其作用域的结束而消失,这样便使垃圾收集器可以释放其值;
lua中有一种习惯的写法是:
local foo = foo
这句代码创建了一个局部变量foo,并用全局变量foo的值初始化它;如果后续函数改变了全局foo的值,那么可以在
这里将全局变量foo的值保存起来;这种方式还可以加速在当前作用域中对foo的访问;
尽量少定义全局变量;局部变量的定义尽量遵循随用随定义的原则,尽可能地缩短变量的作用域;
4.3控制结构
控制结构中的条件表达式可以是任何值,lua将所有不是false和nil的值视为真;
if ... then ...
else/elseif ... end
while ... do ... end
repeat ... until ...
for 循环有数字型和泛型两种
数字型for
for var=exp1,exp2,exp3 do
<执行体>
end
var从exp1变化到exp2,每次变化都以exp3作为步长,并执行一次执行体;
第三个表达式exp3是可选的,若不指定默认步长为1;
for的三个表达式是在循环开始前一次性求值的;控制变量会被自动的声明为
for语句的局部变量,并且在循环体内可见,控制变量在循环结束后就不存在了;
不要在循环过程中修改控制变量的值,否则会导致不可预知的效果;
泛型for
泛型for通过迭代器函数来遍历所有值,如:
for k, v in ipairs(arr) do
print(v)
end
在lua的基础库中ipairs是一个用于遍历数组的迭代器函数;每次循环中k会被
赋予一个索引值,同时v被赋予一个对应于该索引的数组元素值;
通过不同的迭代器,泛型for几乎可以遍历任何东西;标准库中提供了几种迭代器,
迭代文件中每行的io.lines, 迭代table元素的pairs,迭代数组元素的ipairs,
迭代字符串中单词的string.gmatch.
泛型for和数字for的两个相同点: 循环变量是循环体的局部变量;
决不应该对循环变量作任何赋值;
4.4break 和 return
break和return语句用于跳出当前的块;
break语句用于结束一个循环,它只会跳出包含它的那个内部循环,而不会改变外层
的循环;
return语句用于从一个函数中返回一个结果,或者用于简单地结束一个函数的执行;
任何函数的结尾处都有一个隐式地return;如果一个函数没有值返回,那么它就无须
在其结尾处添加return语句;
由于语法构造的原因,break或return语句只能是一个块的最后一条语句;
如果希望在一个块的中间插入一条return或break,可以使用一个显式的do ... end
块来包住;
相关文章推荐
- Lua 学习笔记(四)语句与控制结构
- lua学习笔记---选择,循环语句
- Lua程序设计(第2版)第四章学习随笔——语句
- c++学习笔记-------《c++自学通》第四章 表达式与语句
- lua学习笔记---选择,循环语句
- 第四章&第五章 表达式和语句学习笔记(第一遍阅读)
- 4.lua学习笔记:控制语句
- Lua学习笔记--基本语法规则&控制流语句
- Lua学习笔记之循环语句
- Lua基础教程之赋值语句、表达式、流程控制、函数学习笔记
- Lua 学习笔记(五) —— 语句
- Lua学习笔记(2)-语句、函数
- lua学习笔记_注释、基本数据类型、if语句
- lua学习笔记之再淡for语句的遍历
- Lua学习笔记-第四章
- Win32学习笔记 第四章 输出文本_2
- Asp学习笔记第四章
- Lua学习笔记一
- LUA学习笔记3 - Compilation, Execution, and Errors
- Javascript学习笔记(二)Javascript核心之语句