[Lua]Lua语言基础汇总(3) -- 语句

简介: 赋值赋值的基本含义是修改一个变量或一个table中字段的值,这个和其它语言没有多少区别,但是对于Lua,有一个特性,它允许“多重赋值”,也就是一下子将多个值赋予多个变量,例如以下代码:123local x1, x2 = 2, 4print(x...

赋值

赋值的基本含义是修改一个变量或一个table中字段的值,这个和其它语言没有多少区别,但是对于Lua,有一个特性,它允许“多重赋值”,也就是一下子将多个值赋予多个变量,例如以下代码:

1
2
3
local x1, x2 = 2, 4
print(x1)     -->2
print(x2)     -->4


在多重赋值中,Lua先对等号右边的所有元素求值,然后才执行赋值,例如以下用法,可以非常简便的交换两个元素的值:

1
2
3
4
local x1, x2 = 2, 4
x1, x2 = x2, x1
print(x1)     -->4
print(x2)     -->2


Lua总是会将等号右边值得个数调整到与左边变量的个数相一致,规则是:如果值得个数少于变量的个数,那么多余的变量会被赋为nil;如果值得个数更多的话,那么多余的值会被忽略掉。


局部变量与块

相对于全局变量,Lua同时也提供了局部变量。通过local语句来创建局部变量:

1
2
i = 10     -->全局变量
local i = 10     -->局部变量


在Lua中,局部变量也是有作用范围的,也就是说,出了局部变量的作用范围,局部变量就会失去作用,这个和C++等高级语言是一样的道理。我们在编程的过程中,也可以使用do…end来显示的声明一个块,例如以下代码:

1
2
3
4
do
      local a1 = 10
      local a2 = 10
end          -->a1和a2的作用域到此结束


至于使用局部变量和全局变量,关系到编程风格和实际需要,这里不做多说。


控制结构

几乎所有的语言都有控制结构,同样,对于Lua的控制结构是非常简单的。Lua提供了用于条件执行的if,循环的while、repeat和for。所有的控制结构都有一个显式的终止符:if、for和while以end作为结尾,repeat以until作为结尾。特别注意,在Lua中是不支持switch结构的。


if then else

if语句先测试其条件,然后根据测试结果执行then部分或者else部分,else部分是可选的。如果要编写嵌套的if,可以使用elseif,下面通过代码示例来说明if的使用。

1
2
3
4
5
6
7
8
9
10
11
12
if  a < 0 then a = 0 end
if  a < b then retuan a  else  return  b end
 
if  op ==  "+"  then
      r = a + b
elseif op ==  "-"  then
      r = a - b
elseif op ==  "*"  then
      r = a * b
elseif op ==  "/"  then
      r = a / b
end


while

Lua中的while与其它语言是一样的,示例代码如下:

1
2
3
4
5
local a = 10
while  a > 0  do
      a = a - 1
      -- Do something  else
end


repeat

repeat就好比C++中的do…while结构,循环体至少会执行一次。repeat-until语句重复执行其循环体直到条件为真时结束。


在Lua中有两种for语句的形式:数字型for和泛型for


数字型for

数字型for的语法如下:

1
2
3
for  var = exp1, exp2, exp3  do
      -- Do something
end


var从exp1变化到exp2,每次变化都以exp3作为步长进行递增,并执行一次do…end之间的代码。第三个表达式exp3是可选的,若不指定的话,Lua会将步长默认为1。例如以下代码:

1
2
3
4
5
6
7
for  var = 1, 10  do
      print(var)
end
 
for  var = 10, 1, -1  do
      print(var)
end


在使用for时,需要注意以下两点:

1.for的exp1,exp2和exp3,这三个表达式是在循环开始前一次性求值得;并不会每次循环都进行求值;

2.控制变量var会被自动的声明为for语句的局部变量,并且仅在循环体内可见。


泛型for

泛型for循环通过一个迭代器函数来遍历所有值。在Lua的基础库中提供了ipairs,这是一个用于遍历数组的迭代器函数。从外观上看泛型for比较简单,但其实它是非常强大的。通过不同的迭代器,几乎可以遍历所有的东西。标准库提供了几种迭代器,包括用于迭代文件中每行的io.lines、迭代table元素的pairs、迭代数组元素的ipairs和迭代字符串中单词的string.gmatch等。当然了,我们也可以编写自己的迭代器,在以后的文章中,我会总结如何编写迭代器的。


break与return

break和return语句用于跳出当前的块。这里的break、return和C++等语言是一样的。break语句用于结束一个循环,return语句用于从一个函数中返回结果。

相关文章
|
存储 C语言 索引
[Lua]Lua语言基础汇总(1) -- 类型与值
基础介绍 Lua是一种动态类型的语言。在语言中没有类型定义的语法,每个值都带有其自身的类型信息。在Lua中有8种基本类型,分别是: nil(空)类型 boolean(布尔)类型 number(数字)类型 string(字符串)类型 userdata(自定义类型) function(函数)类型 thread(线程)类型 table(表)类型 以上是Lua中的8中基本类型,我们可以使用type函数,判断一个值得类型,type函数返回一个对应类型的字符串描述。
1109 0
|
C++ 索引
[Lua]Lua语言基础汇总(2) -- 表达式
算术操作符 Lua支持常规的算术操作符有:”+”(加法),”-”(减法),”*”(乘法),”/”(除法),”^”(指数),”%”(取模),一元的”-”(负号)。所有的这些操作符都用于实数。
943 0
|
存储
[Lua]Lua语言基础汇总(4) -- 函数
Lua中的函数和C++中的函数的含义是一致的,Lua中的函数格式如下: 1 2 3 function MyFunc(param)      -- Do something end 在调用函数时,也需要将对应的参数放在一对圆括号中,即使调用函数时没有参数,也必须写出一对空括号。
1084 0
|
3月前
|
存储 NoSQL 关系型数据库
使用lua脚本操作redis
使用lua脚本操作redis
48 0
|
3月前
|
NoSQL Java Redis
Redis进阶-lua脚本
Redis进阶-lua脚本
56 0
|
1月前
|
缓存 NoSQL Java
【Redis】5、Redis 的分布式锁、Lua 脚本保证 Redis 命令的原子性
【Redis】5、Redis 的分布式锁、Lua 脚本保证 Redis 命令的原子性
57 0
|
2月前
|
算法 NoSQL Java
springboot整合redis及lua脚本实现接口限流
springboot整合redis及lua脚本实现接口限流
64 0

相关实验场景

更多