Lua表达式
来源:互联网 发布:面包车拉货选什么软件 编辑:程序博客网 时间:2024/06/15 21:58
Lua表达式
1:算式操作符
print(1 + 1) -->output 2print(5 / 10) -->output 0.5。 这是Lua不同于c语言的print(5.0 / 10) -->output 0.5。 浮点数相除的结果是浮点数-- print(10 / 0) -->注意除数不能为0,计算的结果会出错print(2 ^ 10) -->output 1024。 求2的10次方local num = 1357print(num % 2) -->output 1print((num % 2) == 1) -->output true。 判断num是否为奇数print((num % 5) == 0) -->output false。判断num是否能被5整数
2:关系操作符
=大于等于 == 等于 ~= 不等于
2.1:返回结果
所有的这些操作符的运算结果都是true
或false
2.2:== 和 ~=
==用于相等性测试,操作符~=用于不等性测试。
这2个操作符可以用于任意2个值。
如果2个比较的值是不用的类型,lua就认为他们是不相等的。
print("a" == 3) --> output false
如果2个比较的值是同一种类型的,则根据类的大小规则的比较。
print(1 == 2) --> output false print("a" == "a") --> output true
注意nil只与其之身相等
print(nil == nil) --> output true print(nil == "false") --> output false
2.3:复杂的数据类型table,usedata的比较
对于table,usedata和函数(function),lua是做引用的比较,也就是说,只有他们的引用是同一个对象的时候,才认为他们是相等的。
a = {} a.x = 1 a.y = 0 b = {} b.x = 1 b.y = 0 c = a print(c == a) -->output true print(c == b) -->output false print(c ~= b) -->output true
3:逻辑操作符
Lua 中的 and 和 or 是不同于 c 语言的。在 c 语言中,and 和 or 只得到两个值 1 和 0,其中 1 表示真,0 表示假。而 Lua 中 and 的执行过程是这样的:
与控制语句一样,所有的逻辑的操作符将false和nil视为假,而将讲其他的任何视为真
a and b
如果 a 为 nil或false,则返回 a,否则返回 b
(如果它的第一个操作数为假,就返回第一个操作数;否则返回第二个操作数)a or b
如果 a 为 nil,则返回 b,否则返回 a(如果它的第一个操作数为真了,就返回第一个操作数了,否则返回第二个操作数)
print(4 and 5) -->output 5print(nil and 13) -->output nilprint(false and 13) -->output falseprint(4 or 5) -->output 4print(false or 5) -->output 5
4:字符串连接
4.1:
要在lua连接2个字符串,可以使用操作符 “..” (2个点)。如果其任意一个操作符是数字的话,lua会将这个数字转换为一个字符串
print("hello " .. "world") -->output hello worldprint(0 .. 1) -->output 01
4.2:
lua中的字符串是不可变的值(immutable value)。连接操作符只会创建一个新的字符串,而不会对原操作数进行任何修改。
a = "hello"print(a .. " world") -->output hello world print(a) -->output hello
4.3:
由于 Lua 字符串本质上是只读的,因此字符串连接运算符几乎总会创建一个新的(更大的)字符串。这意味着如果有很多这样的连接操作(比如在循环中使用 .. 来拼接最终结果),则性能损耗会非常大。在这种情况下,推荐使用 table 和 table.concat() 来进行很多字符串的拼接,例如:
local pieces = {}for i, elem in ipairs(my_list) do pieces[i] = my_process(elem)endlocal res = table.concat(pieces)
5:优先级
- / %
- -
a + i < b/2 + 1 <--> (a+i) < ((b/2) + 1)5+x^2*8 <--> 5+ ((x^2)*8)a<y and y<=z <--> (a<y) and (y<=z)-x^2 <--> -(x^2)x^y^z <--> x^(y^z)
- 在二元操作符中,除了指数操作符”^” 和连接操作符 “..” 是”右结合”的,其他的都是”左结合”
6:table构造式(table constructor)
table的构造式有3种方式。
(1)空构造方式,用于创建一个空的table,构造式还可以用于初始化数组。
days = {"sunday","moday","tuesday","wednesday","thursday","friday","saturday"}print(days[1]) -->output sunday
(2)lua还提供了一种特殊的语法用于初始化记录风格的table
a = {x = 10,y = 20} -- 等效下面的代码a = {} a.x = 10a.y = 20
(3)在一个构造式中还可以用分号代替逗号。通常会将分号用于分隔构造式中不同的成分。例如将列表部分与记录部分明显的区分开来:
{x=10 ,y =45 ; "one" , "two" , "three"}
7:三目运算符实现
lua中 三目运算符的实现
a ? b : c
(a and b) or c
a为true 则 (a and b) <==> b
a为false 或 nil时 (a and b) <==> a
又 a or c <==> a
所以
(a and b) or c <==> a ? b : c
- Lua 表达式
- Lua表达式
- Lua 表达式
- Lua表达式
- lua--lua中的表达式
- Lua.2 lua的表达式
- LUA中的正则表达式
- lua笔记之表达式
- Lua基础 表达式
- Lua正则表达式
- Lua基础 表达式
- lua正则表达式
- Lua表达式和语句
- lua学习之表达式
- LUA正则表达式
- Lua正则表达式
- lua正则表达式
- LUA中的正则表达式
- 音频,视频时间戳计算及每帧播放时间
- [LeetCode] Minimum Window Substring
- 区块链开发专题(数字货币转账手续费是多少是如何计算的)
- 课后练习8.15:最大公共子图问题
- Eclipse离线安装TestNG
- Lua表达式
- 数据库数值函数的解析及使用
- 如何映射本地虚拟机或远程服务器磁盘到本地
- java的日期类
- 《Spring实践——不一样的'HelloWorld'》
- Node.js 路由映射和简单例子实现
- SDUT-3103 小鑫爱运动
- angular 1 与 angular 2 有哪些区别
- React +ES6 +Webpack入门