lua学习02——还是基础

***************************************转载请注明出处: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语句)