Lua中的基本语法、控制语句总结

 更新时间:2014年09月29日 09:39:02   作者:果冻想  
这篇文章主要介绍了Lua中的基本语法、控制语句总结,本文总结了赋值、局部变量与块、控制结构、数字型for、泛型for等内容,需要的朋友可以参考下

前言

学习一门语言,首先就是从最基本的语法开始,这一篇将对Lua中的语句进行概要的总结。

赋值

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

复制代码 代码如下:

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

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

复制代码 代码如下:

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

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

局部变量与块

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

复制代码 代码如下:

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

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

复制代码 代码如下:

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的使用。

复制代码 代码如下:

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与其它语言是一样的,示例代码如下:

复制代码 代码如下:

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的语法如下:

复制代码 代码如下:

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

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

复制代码 代码如下:

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语句用于从一个函数中返回结果。

相关文章

  • 使用nginx+lua实现信息访问量统计

    使用nginx+lua实现信息访问量统计

    这篇文章主要介绍了使用nginx+lua实现信息访问量统计,功能很简单,代码也很简洁,有需要的小伙伴可以参考下,然后自由扩展。
    2015-03-03
  • C语言中通过LUA API访问LUA脚本变量的简单例子

    C语言中通过LUA API访问LUA脚本变量的简单例子

    这篇文章主要介绍了C语言中通过LUA API访问LUA脚本变量的简单例子,需要的朋友可以参考下
    2014-11-11
  • Lua教程(七):数据结构详解

    Lua教程(七):数据结构详解

    这篇文章主要介绍了Lua教程(七):数据结构详解,本文讲解了数组、二维数组、链表、队列与双向队列、 集合和包(Bag)、StringBuilder等内容,需要的朋友可以参考下
    2015-04-04
  • Lua和Nginx结合使用的超级指南

    Lua和Nginx结合使用的超级指南

    这篇文章主要介绍了Lua和Nginx结合使用的指南,从数据转换到API等各个方面均有涉及,超推荐!需要的朋友可以参考下
    2015-06-06
  • lua闭包的理解以及表与函数的几种表达方法

    lua闭包的理解以及表与函数的几种表达方法

    本文首先通过具体的例子讲解了Lua中闭包的概念,然后总结了闭包的应用场合,最后探讨了Lua中闭包的实现原理,以及lua中表与函数的3种表达方式的汇总
    2015-08-08
  • Lua学习笔记之表达式

    Lua学习笔记之表达式

    在Lua中,表达式包括:数值常量、字符串字面值、变量、单目和双目运算符,函数调用,也包括一些非传统的函数定义和表结构。今天我们就来详细了解下lua中的表达式
    2015-04-04
  • Lua学习笔记之运算符和表达式

    Lua学习笔记之运算符和表达式

    这篇文章主要介绍了Lua学习笔记之运算符和表达式,本文在代码中使用注释对Lua的运算符和表达式做了讲解,需要的朋友可以参考下
    2014-09-09
  • Lua中的源代码预编译浅析

    Lua中的源代码预编译浅析

    这篇文章主要介绍了Lua中的源代码预编译浅析,Lua确实允许在运行源代码之前,将源代码预编译成一种中间形式(类比Python的.pyc),需要的朋友可以参考下
    2014-09-09
  • Lua面向对象编程之类的简单实现方式

    Lua面向对象编程之类的简单实现方式

    这篇文章主要介绍了Lua面向对象编程之类的简单实现方式,本文直接给出一个类的编码实例,并详细讲解了调用方式,需要的朋友可以参考下
    2015-04-04
  • Lua中简单的错误处理实例

    Lua中简单的错误处理实例

    这篇文章主要介绍了Lua中简单的错误处理实例,本文讲解了Lua错误处理中的error、assert、pcall等内容,需要的朋友可以参考下
    2014-09-09

最新评论