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

lua学习02——还是基础

2015-11-15 23:12 525 查看
***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************

到北京,慢慢步入正轨了,恢复博文更新~

之前相关文章

工具:sublime text2

第一篇: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********************************************
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  lua表达式 lua语句