您的位置:首页 > 编程语言 > Lua

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 脚本