博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lua 学习笔记(二)—— 语句
阅读量:6943 次
发布时间:2019-06-27

本文共 2069 字,大约阅读时间需要 6 分钟。

Lua 中的语句支持赋值,控制结构,函数调用,还有变量声明。

不允许空的语句段,因此 ;; 是非法的。

1 语句组 | chuncks

chunck ::= {stat[';']}

([';'] 应该是表示语句组后面 ; 是可选项。)

2 语句块 | blocks

block ::= chunckstat ::= do block end

可以将一个语句块显式地写成语句组,可以用于控制局部变量的作用范围。

3 赋值 | assignment

Lua 支持多重赋值。

多重赋值时,按序将右边的表达式的值赋值给左值。右值不足补 nil,右值多余舍弃。

b = 1a,b = 4 -- a = 4,b = nil

+++

Lua 在进行赋值操作时,会一次性把右边的表达式都计算出来后进行赋值。

i = 5i,a[i] = i+1, 7 -- i = 6 ,a[5] = 7

特别地,有

x,y = y,x -- 交换 x,y 的值

+++

对全局变量以及表的域的赋值操作含义可以在元表中更改。

4 控制结构

4.1 条件语句

if [exp]    [block]elseif [exp]    [block]else    [block]end

4.2 循环语句

while [exp]    [block]end

+++

repeat    [block]until [exp]

注意,由于 repeat 语句到 until 还未结束,因此在 until 之后的表达式中可以使用 block 中定义的局部变量。

例如:

a = 1c = 5repeat    b = a + c    c = c * 2until b > 20print(c)            -->     40

+++

4.3 breakreturn

breakreturn 只能写在语句块的最后一句,如果实在需要写在语句块中间,那么就在两个关键词外面包围 do end 语句块。

do break end

5 For 循环

for 循环的用法比较多,单独拎出来讲。

for 中的表达式会在循环开始前一次性求值,在循环过程中不再更新。

5.1 数字形式

for [Name] = [exp],[exp],[exp] do [block] end

三个 exp 分别代表初值,结束值,步进。exp 的值均需要是一个数字。

第三个 exp 默认为 1,可以省略。

a = 0for i = 1,6,2 do    a = a + iend

等价于

int a = 0;for (int i = 1; i <= 6;i += 2){ // 取到等号,如果步进是负的,那么会取 i >= 6    a += i;}

5.2 迭代器形式

迭代器形式输出一个表时,如果表中有函数,则输出的顺序及个数不确定(笔者测试得出的结果,具体原因未知)。

迭代器形式的 for 循环的实质

-- 依次返回 迭代器、状态表、迭代器初始值function mypairs(t)    function iterator(t,i)        i = i + 1        i = t[i] and i      -- 如果 t[i] == nil 则 i = nil;否则 i = i        return i,t[i]    end    return iterator,t,0end-- 一个表t = {[1]="1",[2]="2"}-- 迭代形式 for 语句的 等价形式dolocal f, s, var = mypairs(t)    while true do        local var1, var2 = f(s, var)        var = var1        if var == nil then break end        -- for 循环中添加的语句        print(var1,var2)    endend-- 迭代形式 for 语句for var1,var2 in mypairs(t) do    print(var1,var2)end--> 1   1--> 2   2--> 1   1--> 2   2

5.2.1 数组形式

ary = {[1]=1,[2]=2,[5]=5}for i,v in ipairs(ary) do    print(v)                    --> 1 2end

从1开始,直到数值型下标结束或者值为 nil 时结束。

5.2.2 表遍历

table = {[1]=1,[2]=2,[5]=5}for k,v in pairs(table) do    print(v)                    --> 1 2 5end

遍历整个表的键值对。

关于迭代器的更多内容,可参考。


参考链接

(介绍 Lua 迭代器的详细原理以及使用)

转载地址:http://mkonl.baihongyu.com/

你可能感兴趣的文章
批处理for语句详解
查看>>
zabbix部署(二)
查看>>
理解Socket通信中的Input和Output
查看>>
1.3-Linux基础命令
查看>>
Keepalived安装配置
查看>>
韩遭史上最大规模****** 3500万客户信息泄露
查看>>
Building a Dynamic UI with Fragments
查看>>
vue中的数据绑定
查看>>
css中tabel-cell属性的简单总结
查看>>
Servlet底层原理
查看>>
form表单的两种提交方式,submit和button的用法
查看>>
mariadb数据库
查看>>
计算机之计算的实现
查看>>
2.16 umask
查看>>
Java之品优购课程讲义_day12(3)
查看>>
pyhanlp 停用词与用户自定义词典功能详解
查看>>
深度解析Tengine的调试与资源监控方法论
查看>>
常见天气api
查看>>
linux实战---基于KVM虚拟化搭建LAMP
查看>>
创建一个jdbc连接
查看>>