【Lua程序设计总结】第三章:表达式 和 第四章 语句

三四两章内容比较简单就放一起了,话不多说直接开始。

 

3.1 算术操作符

Lua支持常规的“+”、“-”、“*”、“/”、“%”等操作符,这里不一一例举。这里稍微说一下%(取余)操作符,介绍一些小技巧。

通过 x%1 可以获取x的小数部分,而 x-x%1 则就是x的整数部分,类似的 x-x%0.01则可以获取到x小数点后两位。这些计算方式在别的语言中也可以适用。

3.2 关系操作符

Lua中的关系操作符有<、>、 <=、 >=、 ==、 ~= 6种,结果都为true或false。

在lua中 table、function、userdata 都是引用比较的。只有当他们引用同一个对象时才相等。

a={} a.x=1 a.y=2
b={} b.x=1 b.y=2
c=a

在上面这个简单的示例里,a==c,但a~=b。

3.3 逻辑操作符

Lua中逻辑操作符包括and、or和not。

  • and:当第一个操作数为假,则会返回第一个操作数,否则返回第二个操作数,以此类推直到最后一个。
  • or:当第一个操作数为真,则返回第一个操作数,否则返回第二个操作数,以此类推直到最后一个。
local x = y or 10

在Lua中经常会用上面的方式赋值默认值,当y为nil时则会赋值10。

function Fun()
    local x = nil
    return x or 10
end

同样如上面示例,当x为nil时则会返回默认值10。

local max = (x > y) and x or y

在Lua中可以用上面的方式来进行C语言中的三元表达式。

3.4 字符串连接

在Lua中可以用“..”(两个点)连接字符串。这里需要特别注意的是,在Lua中字符串是不可变的值。连接操作符只是创建了一个新的字符串,而不会对原有的字符串做修改。

3.6 table构造式

table的构造和初始化都比较的简单下面直接列举。

  • a = {} table最简单的构造方法
  • a = { 1,2,3,4,5,6,7,8,9 } table数组的构造方式
  • a = { x = 10, y = 20 } table键值对的构造方式
  • a = {}; a.x = 10; a.y = 20 同样的table键值对的构造方式

关于table这里需要再提醒一下的是,在Lua中table数组的索引是从1开始的,这里需要格外注意。

 

4.1 赋值

在Lua中可以在一行中定义多个变量,并且也可以在同一行里进行多重赋值。如下面示例:

Local a, b, c = 1, 2, 3
print(a, b, c)  --> 1  2  3

local x, y = 10
print(x, y)   --> 10,  nil

当然如果没有为每一个变量赋值,则会为nil。

function GetNumber()
    return 10, 20
end

local x, y = GetNumber()
print(x, y)    --> 10  20

如上面示例,同样在函数返回时,也可以进行多重赋值,第一个返回值会赋值第一个变量,第二个返回值会赋值第二个变量,以此类推。

在赋值这一部分说一个Lua中的特有的小技巧,可以方便交换两个对象中的数值。

local x, y = 10, 20
x, y = y, x
print(x, y)  --> 20, 10


local t = { 10, 20 }
t[1], t[2] = t[2], t[1]
print(t[1], t[2])   --> 20, 10

4.2 局部变量与块(block)

通过 local 关键字可以声明一个局部变量,局部变量的生命周期仅在一个代码块中。

do
    local x = 10
    print(x)   --> 10
end

do到end就是一个代码块,x的生命周期就是do到end之间的代码块。

在Lua中应该尽可能的使用局部变量,这是一种比较好的代码风格。优点在于:

  • 访问局部变量比访问全局变量的速度更快。
  • 使用局部变量也可以避免搞乱全局环境。
  • 缩短变量的作用域也可以提高代码的可读性。

4.3 控制结构

Lua提供了其他语言里常有的if then else、while、repeat。

repeat关键字虽然与其他语言不太相同,但与其他语言中的do while是一样的,会先执行repeat until中的代码块,然后在最后判断ture或false是否再次执行,下面举个例子:

local x = 1
repeat
    print(x)
    x = x + 1
until x > 10

数字型for

在Lua中for有两种形式:数字型for和泛型for,先说说数字型for

for var = exp1, exp2, exp3 do
    <代码块>
end

var为临时变量,exp1为初始值。exp2为结束值,exp1>exp2时终止。exp3为步长也就是exp1每次的递增值,默认为1,如果exp3为-1则是递减。exp3是可选的。

泛型for

泛型for是通过迭代器函数来遍历的,常用的迭代器有Lua提供的pairs和ipairs。

pairs主要用于遍历键值对的table,示例:

local table = {}
table.one = 1
table.tow = 2
table.three = 3
table.four = 4
table.five = 5

for key, value in pairs(table) do
    print("key:" .. key .. "  value:" .. value)
end


-->  key:three  value:3
-->  key:four  value:4
-->  key:five  value:5
-->  key:one  value:1
-->  key:tow  value:2

由于table键值对存储数据,所以输出的结果并非顺序的,并且每次输出结果的顺序也不相同。

ipairs是用于遍历数组元素的,同样先举例子:

local table = { 1,2,3,4,5}
for key, value in ipairs(table) do
    print("key:" .. key .. "  value:" .. value)
end

-->  key:1  value:1
-->  key:2  value:2
-->  key:3  value:3
-->  key:4  value:4
-->  key:5  value:5

ipairs遍历数组同样是从下标1开始的,一次遍历。当下标中的元素为0时就会结束退出。

虽然pairs也能遍历数组,但速度会远不如ipairs并且也不是顺序的。

 

关于Lua的表达式和语句就先说这么多,想要掌握的好还是要多写代码。

 

猜你喜欢

转载自blog.csdn.net/huoyixian/article/details/108591844