***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************
到北京,慢慢步入正轨了,恢复博文更新~
之前相关文章
第一篇:lua学习01(关于一些基本类型、function、table)
本篇博文内容:
> lua 的 表达式
> lua 的 语句
1. lua 的 表达式
- - - 算数操作符
基本的 +、-、*、/
还有 ^(次幂)、%(取余)
比如: 8^(-1/3) 就是 8 开三次方的倒数 就是 0.5
然后,就是 关于小数, x%1 代表 取x的小数部分,
同理 x%0.1 代表 取 x小数部分(除第一位)——这有啥用呢?——这个可以用来精确小数,x-x%0.1 就可以精确到小数点后一位
- - - 逻辑运算符
最基本的 >、<、==、<=、>=,不等于 是这样的 ~=
① 对于不同类型的值,它们在做相等性测试的时候是false,
② 而且 nil 只有与 nil比较才是 true,
③ 在比较 字符串类型 的数据尤要小心,你会发现 "2"<"15" 是 false的
④ 非常重要的一点,引用,比如下面这样
local a = {}
a.x = 3 ; a.y = 4
local b = {}
b.x = 3 ; b.y = 4
local c = a
if a == b then
print("a == b")
else
print("a ~= b")
end
if a == c then
print("a == c")
else
print("a ~= c")
end
-- 输出
a ~= b
a == c
lua的比较是引用比较,只有它们引用同一个对象时,才会判断相等,否则就是不相等。
- - - 逻辑操作符
基本的 and、or、not
① 只将 nil 和 false 视为假
② and、or 做 "短路求值",就是在第一个已经判断出结果时,就不会去求第二个表达式。
- - - 操作符的优先级 与 结合性
由高到低:
^ |
not # -(负) |
* / % |
+ -(减) |
..(字符串连接符) |
< <= > >= == ~= |
and |
or |
2. lua 的 语句
- - - 赋值
在lua中,赋值语句也是很方便的,最平常那种就不多说了(也没什么说的)
lua支持多重赋值: a,b,c = 1,2,3
当然,如果左面变量多了,靠后的那些没有对应赋值的就为nil;如果右面数多了,比左面多余的部分舍弃掉。
而且,在lua中交换两个变量值很简单—— x,y = y,x
- - - 控制结构
基本的 if-else、while、for、repeat
- - if-else
形式:
if ... then
--body
else
--body
end
如果是 if-elseif-else
if ... then
--body
elseif ... then
--body
else
--body
end
这里要注意,elseif 中间 不要有空格哟,
还有,lua中不支持 switch 语句,所以 if-elseif-else 会很常见,
其实,我感觉用table来代替switch比if-elseif-else好很多
-- method1
function animalVoice1( ani )
if ani=="dog" then
print("wang")
elseif ani=="cat" then
print("miao")
elseif ani=="wolf" then
print("woo~~")
elseif ani=="sheep" then
print("mie")
else
print("Sorry,I've never heard that voice!")
end
end
-- method2
local voicePackage = {
{
name = "dog",
voice = "wang",
},
{
name = "cat",
voice = "miao",
},
{
name = "wolf",
voice = "woo~~",
},
{
name = "sheep",
voice = "mie",
},
}
function animalVoice2( ani )
for k,v in pairs(voicePackage) do
if v.name == ani then
print(v.voice)
return
end
end
print("Sorry,I've never heard that voice!")
end
-- test
animalVoice1("cat")
animalVoice2("cat")
animalVoice1("cow")
animalVoice2("cow")
-- 输出
miao
miao
Sorry,I've never heard that voice!
Sorry,I've never heard that voice!
虽然,看起来第二种方法比第一种方法代码长很多,但是维护性,可读性,比第一种好。
- - while
形式:
while ... do
-- body
end
- - for
for var=exp1,exp2,exp3 do
--body
end
for的var变量初值为exp1,exp2为最终值,exp3为变化属性。
比如 var=1,10,2 就代表,var=1, var<=10 ,var=var+2(lua中没有 += 这说= =。)
如果不想给exp2设置上限,就写为 math.huge。
for还有一种是迭代器遍历的:
for i,v in pairs(table) do
--body
end
这里会遍历 table这个表,i是索引值,v是元素值。
一般 用 pairs 遍历 表; 用 ipairs 来遍历 数组。
- - repeat
repeat
--body
until ...
也是个循环的作用,
但是与while、for这些不同,它的body中声明的东西,作用域包括了条件判断处。
比如,你在body声明一个 x,可以在 ... 中用x来限制循环次数。
***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************