找回密码
 register

QQ登录

只需一步,快速开始

[*LUA4*] [Lua基础]第三章 表达式

[复制链接]

[*LUA4*] [Lua基础]第三章 表达式

[复制链接]
Waylee

主题

0

回帖

7744

积分

仙帝

积分
7744
Waylee 2024-10-22 12:54 | 显示全部楼层 |阅读模式

马上注册,查看网站隐藏内容!!

您需要 登录 才可以下载或查看,没有账号?register

×
以LUA4.0为案例
Lua 中的表达式包括数字常量、字符串常量、变量、一元运算符、二元运算符和函数调用。还可以是非传统的函数定义和表构造。
3.1 算术运算符
二元运算符: +、 -、 *、 /、 ^(加、减、乘、除、幂)
一元运算符: -(负值)
这些运算符的操作数都是实数。
例如,x^0.5将计算x的平方根,x^(-1/3)将计算x立方根的倒数
在Lua 5.0和Lua4.0中没有取模操作符%,可以根据以下规则实现相同的效果
a%b == a - floor(a/b)*b

对于整数来说,以上算是通常都是有意义的,计算结果的符号永远与第二个参数相同。而对于实数,则可能有其他用途。
例如,x%1的结果计算x的小数部分,
x = 3.1415926
print(x - floor(x/1)*1) -->0.1415926000000001

而x-x%1的结果计算其整数部分。
x = 3.1415926
print(x - (x - floor(x/1)*1)) -->3

类似地,x-x%0.01则是精准到小数点后两位的结果。
x = 3.1415926
print(x - (x - floor(x/0.01)*0.01)) -->3.14

游客,如果您要查看本帖隐藏内容请回复

3.6 表的构造 (table 构造式)(table constructor)
构造器是创建和初始化表的表达式,表是 Lua 特有的功能强大的东西,最简单的构造器是“{}”,用来创建一个空表。可以直接初始化数组(即“序列(sequence)” 或 “列表(list)”):
days = {"Sunday", "Monday", "Tuesday", "Wednesday","Thursday", "Friday", "Saturday"}

Lua 用"Sunday"初始化 days[1](第一个元素索引为 1),用"Monday"初始化 days[2]……
print(days[4]) --> Wednesday

构造函数可以使用任何表达式初始化:
tab = {sin(1), sin(2), sin(3), sin(4), sin(5),sin(6), sin(7), sin(8)}

Lua还提供了一种特殊的语法用于初始化记录风格的table:
a = {x =10,y=20}

以上这行代码等价于这些语句:
a = {}; a.x=10; a.y=20;

不管用何种方式创建表,我们都可以向表中添加或者删除任何类型的域,构造函数仅仅影响表的初始化。
w = {x = 0, y = 0, label = "console"}
x = {sin(0), sin(1), sin(2)}
w[1] = "another field"
x.f = w
print(w["x"]) --> 0
print(w[1]) --> another field
print(x.f[1]) --> another field
w.x = nil -- remove field "x"

下面介绍一种更一般的初始化方式,我们用“[表达式]”显式地表示将被初始化的索引:
opnames = {
        ["+"] = "add", 
        ["-"] = "sub", 
        ["*"] = "mul", 
        ["/"] = "div"
}
i = 20; s = "-"
a = {
        [i+0] = s, 
        [i+1] = s..s, 
        [i+2] = s..s..s
}
print(opnames[s]) --> sub
print(a[22]) --> ---

链表风格初始化和记录风格初始化是这种一般初始化的特例:
{x = 0, y = 0}              <--> {["x"] = 0, ["y"] = 0}
{"red", "green", "blue"}    <--> {[1] = "red", [2] = "green", [3] = "blue"}

对于某些情况如果真的需要以0作为一个数组的起始索引的话,通过这种语法也可以轻松做到:
days = {[0] = "Sunday", "Monday", "Tuesday", "Wednesday","Thursday", "Friday", "Saturday"}

现在第一个值“Sunday”的索引就为0了。这个索引0并不影响其它元素,“Monday”照常索引为1,因为它是构造式中列表风格中的第一个值,后续其他值的索引依次递增。但无论是否使用这种初始化语法,都不推荐在Lua中以0作为数组的起始索引。大多数内建函数都假设数组起始于索引1,若遇到以索引0开始的数组,他们就无法进行正确的处理了。
在构造函数的最后的逗号是可选的,可以方便以后的扩展。
a = {[1] = "red", [2] = "green", [3] = "blue",}

在构造函数中域分隔符逗号可以用分号替代,通常我们使用分号用来分割不同类型的表元素,例如将列表部分与记录部分明显地区分开。
a = {x = 10, y = 45; "one", "two", "three"}

雪舞知识库 | 浙ICP备15015590号-1 | 萌ICP备20232229号|浙公网安备33048102000118号 |网站地图|天天打卡

GMT+8, 2024-11-23 20:20 , Processed in 0.080625 second(s), 10 queries , Redis On.

Powered by XueWu Licensed

Copyright © Tencent Cloud.

快速回复 返回顶部 返回列表