Lua学习笔记(2)——表达式

算术操作符

1.常规的算术操作符:二元的 “ + "," - "," * "," / "," ^ ", " % ";一元的:“-”(负号)

2.取模:a%b = a - floor ( a / b ) * b。对于整数来说通常是有意义的。而对于实数则可能有其他用途:x%1的结果是x的小数部分,而x-x%1结果是其整数部分。

x-x%0.01是x精确到小数点后两位的结果

关系操作符

1.关系操作符:>, <, <=, >= , == , ~= 。

2.所有关系操作符的运算的结果都是true或false。

3.任意两个值需要类型相同,值相等才会相等。类型不同Lua就人为它们不相等。

4.对于table,userdata和函数,作引用比较。即,当它们引用同一个对象时才认为它们相等。

Lua学习笔记(2)——表达式_第1张图片
引用比较

5.比较两个不同类型值时需要注意,字符串是按字母次序作比较的。例如:2<15 -> true,"2"<"15" -> false(因为是按照字母次序来作比较的)。

逻辑操作符

1.逻辑操作符:and, or ,not

2.false和nil视为假,其他任何东西视为真。

3.and,第一个操作数为假时返回第一个操作数,反之返回第二个操作数。

4.or,第一个操作数为真时返回第一个操作数,反之返回第二个操作数。

Lua学习笔记(2)——表达式_第2张图片
and   or

5.and 和 or 都使用“短路求值(short-cut evaluation)”,即只会在需要时才去评估第二个操作数。短路求值可以确保像(type(v) == "table" and v.tag == "h1" )这样的表达式不会导致运行时错误(当v不是一个table时,Lua不会对v.tag进行求值评估)。

Lua学习笔记(2)——表达式_第3张图片
选出数字x和y中的较大者

6.x = x or v 等价于 if not x then x = v end(当x没有初始化时,将其设为一个默认值v)。

7.not,只返回true或false。

not

优先级


Lua学习笔记(2)——表达式_第4张图片
操作符的优先级

1.指数操作符“^”和连接操作符“..”是“右结合”,其他所有操作符为“左结合”。

Lua学习笔记(2)——表达式_第5张图片
等价式

构造式

1.构造式是用于创建和初始化table的表达式。

2.最简单的构造式是空构造式 {} ,用于创建一个空table,或者初始化数组。

初始化数组(序列或列表)

3. a = {x = 10, y = 20}  等价于  a = {}; a.x = 10; a.y = 20;

4.table创建后可以增删改:

Lua学习笔记(2)——表达式_第6张图片
table的增删改

5.链表代码:

链表(从标准输入中读取,按每行相反的次序存储到一个链表中,类似于栈)
Lua学习笔记(2)——表达式_第7张图片
遍历链表并打印

6.记录风格的初始化和列表风格的初始化混合在一个构造式中:

Lua学习笔记(2)——表达式_第8张图片
混合构造式
每个polyline[i]元素都是一个table,表示一条记录

7.Lua提供一种通用的格式,允许在方括号之间,显式地用一个表达式来初始化索引值。

Lua学习笔记(2)——表达式_第9张图片
更通用的格式

8. { x = 0, y=0 } 等价于 { ["x"] = 0, ["y"] = 0 }

9.{"r", "g","b"} 等价于 { [1] = "r", [2] = "g", [3] = "b"}

10.构造式中可以用分号代替逗号,区分构造式中不同的成分:

将列表部分与记录部分区分开

你可能感兴趣的:(Lua学习笔记(2)——表达式)