Chinaunix首页 | 论坛 | 博客
  • 博客访问: 866037
  • 博文数量: 66
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 2071
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-04 15:22
个人简介

从事IT相关工作近10年,获得《网络规划师》《信息系统项目管理师》《系统分析师》、Cisco等认证,对网络和操作系统有较深理解,对认证计费系统和虚拟化技术有深入研究。

文章分类

全部博文(66)

文章存档

2019年(4)

2018年(1)

2015年(2)

2014年(16)

2013年(43)

分类: Python/Ruby

2014-01-15 00:14:31

1、Lua支持标准的语句,包括赋值、控制结构、过程调用等等,同时支持一些不太常见的语句,比如多重赋值(Multiple Assignment)以及局部变量声明等等。

2、赋值语句
赋值(Assignment)基本含义就是修改一个变量或者table中字段的值:
a = "hello" .. "world"
t.n = t.n + 1

也支持多重赋值,比如
a,b = 102*x  -- 这样a,b 就被分别赋值10和 2*x的值了
因为Lua先对等号右边的所有元素求值,然后才执行赋值,这样可以用于两个变量交换
x,y = y,x
两边值的个数如果不同的话做如下处理,左边个数多的话多出的被赋值nil,如果左边的个数少的话,右边多余的被丢弃。

这同时可以用于一个函数具有多个返回值的情况,比如
a,b = f();  -- 其中f() 函数具有两个返回值的话就可以分别赋值给 a,b 两个变量

3、局部变量和块(Block)
局部变量的作用域仅限制于声明它们的那个块,一个块(Block)是一个控制结构的执行体、或者是一个函数的执行体或者是一个程序块。
如果定界不明显,可以强制使用 do  end 方式显式的定义一个块。
如果一条声明语句没有进行初始化,那么声明的所有变量都会初始化为nil。

4、控制语句
Lua提供了一组小巧的控制结构,包括if条件语句,用于迭代的 while repeat 和 for ,所有的控制结构都有一个显示的终止符号
if for while 都是以end为结尾
repeat 以until作为结尾

5、if then else
比较经典的语法结构
if a <0 then a =0 end
if a >0 then
    a = 10
elseif a = 0 then
    a = 20
end

6、while
先测试while的条件,如果假的话循环直接结束;不然,Lua执行循环体,直到条件为假。
local i = 1
whilea[i] do
    print (a[i])
    i = i + 1
end

7、repeat
repeat - until 语句重复执行循环体直到条件为真的时候结束,至少会执行一次
repeat 
    line = io.read()
until line ~""
print(line)

8、for 语句
for 语句在Lua中有两种形式:数字型for(Numeric for) 和 泛型for(generic for)

9、数字型for
var 从 exp1变化到 exp2,每次变化都以 exp3 为步进增长,每次增长都执行一次 执行体,exp3 是可选的,不写则步进为1
for var = exp1,exp2,exp3 do
    <执行体>
end

for i=1,10 do print (i) end

--如果不想要设置上限的话,可以使用 math.huge
for i=1,math.huge do
    print(i)
end
控制变量(比如上面的i)只在循环内部可见,一旦循环结束也就不存在了。

10、泛型for
泛型 for 循环通过一个迭代器(iterator)函数来遍历所有值:
for i,v in pairs(a) do print(v) end
非常经典的 key, value 形式,如果学习过其他的高级语言,一定不难以理解。

11、break 与 return
Break仍然是跳出当前的循环体,而return将会返回值后完全退出当前的块,return后的内容都不会得到执行。


1、在交互里面使用 local a = 1 接着输出 print(a) 为什么可能是nil?
答:因为交互模式里面,每次输入内容就有可能成为一个程序块,因此内容直接被垃圾回收掉了,一般可以通过人工的方式进行定义块。
do 回车后开始输入不同的命令,直到输入 end 才会停止作用域。

2、使用局部变量的好处?
答:①避免把无用的名称引入全局环境。 ②访问局部变量速度更快。 ③局部变量通常会随着作用域结束而消失,更好的垃圾回收。

3、在lua中经常见到这样的写法 local foo = foo ,作用是?
答:①创建局部变量foo并用全局变量进行初始化。②后续改变了全局foo,可以用来把值保存起来。③可以加速当前域中的访问。

4、在块中间进行变量声明是不是不如在开头部分声明习惯好?
答:正好相反,在需要的位置进行声明,可以让变量在声明的时候就有一个有意义的初始值(不会忘记去初始化),同时,缩短变量的作用域有助于提高代码的可读性。

5、在Lua中经常见到一大堆的if else 语句,为啥不用switch,是可读性差么?
答:不是,因为没有switch语句。

6、系统标准库中的迭代器有哪些呢?
答:①用于迭代文件中的每一行的 io.lines  ②用于迭代table元素的 ipairs ③迭代字符串中单词的(string.gmatch)  等。

阅读(4286) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~