注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

snoopyxdy的博客

https://github.com/DoubleSpout

 
 
 

日志

 
 

lua程序设计(2) - 语句和函数  

2013-02-25 12:49:01|  分类: lua |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
1、lua允许多重赋值
a,b = 10, 2*x

2、交换x和y的值
x,y = y,x

3、如果多重赋值等号左边的变量名多余右边的值,则右边的少于左边的值会以nil代替,反之右边多余的值会被去掉
例如:
a,b,c = 0;
print(a,b,c)  -- 0,nil,nil
a,b,c = 0,0,0
print(a,b,c)  -- 0,0,0

4、一般多重赋值用来接收函数的2个返回值,比如:
a,b = f()
则a和b分别被赋值了函数f的返回值

5、全局变量和局部变量
j = 10 -- 全局变量
local i = 1 -- 局部变量
局部变量仅作用于声明它的那个块,一个块是一个程序体,例如下面,从while到end是一个程序块
x=10
local i =1
while i <= x
do
local x = i*2
print(x)
i = i + 1
end

6、显示的声明一个程序块
do
 local a = 1
 local b = 2
end

7、一个局部变量和局部变量同名的例子:
local a,b = 1,10
if a<b then
print(a)  -- 1
local a    
print(a)   --nil
end
print(a,b)   -- 1  10

8、在lua中有一种书写习惯
local foo = foo
利用全局变量赋值给局部变量可以暂存全局变量而且会加速程序

9、if语句,lua不支持switch语句
if op == '+' then
r=a+b
elseif op == '-' then
r=a-b
else
r=a*b
end

10、while语句
如果条件为假则循环结束,否则一直执行下去
local i = 1
while a[i] do
print(a[i])
i = i + 1
end

11、repeat until至少执行循环一次
repeat
line = io.read()
until line ~= ""

12、for循环
for var=exp1,exp2,exp3
<执行体>
end
var从exp1变化到exp2,每次步长为exp3,exp3是可选的,默认为1
注意i是局部变量,所以在循环体外去读取循环变量会出现错误
例如
for i=1,10 do
print(i)
end
max = i  --错误!

13、for迭代器
a={x=1,y=2;3,4,5}
for i,v in ipairs(a) do
print(i,v)
end
这里将只叠代a表格数组部分,结果为
1 3
2 4
3 5

14、for迭代器2
a={x=1,y=2;3,4,5}
for i,v in pairs(a) do
print(i,v)
end
这里将叠代所有atable的key和value,结果为
1 3
2 4
3 5
y 2
x 1

15、return和break
break用于跳出循环
return用于跳出函数

16、一个简单的函数例子
function add(a)
local sum=0
for i,v in ipairs(a) do
sum = sum + v
end
return sum
end

17、函数多重返回值
return a,b
这样就可以返回多个值

18、可以讲函数放入一个圆括号中,迫使它只返回一个值

19、unpack
x = {1,2,3,4}
print(unpack(x))
a,b,c,d = unpack(x)
print(a,b,c,d)
结果为:
1 2 3 4
1 2 3 4

20、变长参数
function add(...)
local s=0
local a,b = ...  -- 获得可变参数的前2个
print(a,b)
for i,v in ipairs({...}) do
s = s + v
end
return s
end

print(add(3,4,10,25,12))

21、select选择器
select('#', ...) 返回可变参数的长度总数
select(i, ...)  返回可变参数的第i个参数

22、当参数为一个table时,函数调用的圆括号是可有可无的
rename{old="temp.lua", new="temp1.lua"}

23、异常try catch使用 pcall
local status, err = pcall(function() error({code=121}) end)

24、throw 异常使用error函数
function foo(str)
    if type(str) ~= "string" then
        error("string expected")
    end
...
end

25、print(debug.traceback())
独立的Lua解释器用来构建错误信息的函数就是debug.traceback。你可以在任何时候调用debug.traceback获取当前运行状况的跟踪信息
  评论这张
 
阅读(966)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016