Lua(二)——表达式
2015-11-11 23:29
423 查看
Lua的表达式中可以包含数字常量、字面字符串、变量、一元和二元操作符及函数调用。表达式中还可以包括函数定义和table构造式。
nil只与其自身相等;
table/function/userdata三种类型是做引用比较的,即
同
在table构造式中可以使用
和函数相关的内容我们放到之后的博客中进行讲解,敬请关注。完。
1. 算数操作符
1.1 二元算数操作符+ 加 - 减 * 乘 / 除 ^ 指数 % 取模加减乘除不必多说,与其他编程语言相同。在
lua中可以用
^计算指数:
print(4 ^ 2) -- 16 print(4 ^ 1 / 2) -- 2
%用于取模,和其他语言并没有不同。在
lua中可以使用如下方式决定保留几位小数:
num = math.pi -- 3.1415926535898 print(num - num % 1) -- 3 整数部分 print(num - num % 0.01) -- 3.14 保留两位小数 print(num - num % 1e-N) -- 保留N位小数,N为非负整数以这种方式保留小数不会出现进位的情况(即“五入”)。在其他语言中也可以使用这种方式,只是由于单精度浮点数存在四舍五入的问题,可能会造成一些误差。在
JavaScript与
python中,
num = 3.1415926535898 // JavaScript num.toFixed(N) // 保留N位小数,N为非负整数,默认N=0,自动四舍五入 Math.round(num * 1e+N) / 1e+N // 保留N位小数,N为非负整数,自动四舍五入 # python round(num, N) # 保留N位小数,N为非负整数,默认N=0,自动四舍五入 "%.Nf" % num # 保留N位小数,N为非负整数,自动四舍五入另外,在
lua中没有
C/
C++/
Java/
JavaScript/
Python中的
+= -= *= /+ %=运算符,在编码时需留意。1.2 一元算数操作符
- 负号
2. 关系操作符
lua中有以下关系操作符,用来进行比较操作:
< 小于 > 大于 <= 小于等于 >= 大于等于 == 等于 ~= 不等于所有比较操作的结果都是true或false。需要注意以下几点:和其他大多数编程语言不同,不等于比较符为
~=,而不是
!=;
nil只与其自身相等;
lua在比较操作时不会做自动转型,类型不同的两个值永远不等。在遇到string和number比较时,
lua会抛出错误;
table/function/userdata三种类型是做引用比较的,即
a = {} a.x = 1 b = {} b.x = 1 print(a == b) -- false
3. 逻辑操作符
与python完全相同,
lua使用如下保留字作为逻辑操作符:
and 与 or 或 not 非关于运算符要注意一下几点:在Lua(一)——类型与值我们就提到过,
lua只将false和nil视为假,其他任何值包括0与空字符串都视为真;
lua中的and/or为短路与和短路或,所谓短路,是指一旦逻辑判断结果已定时不会继续向后做判断,这样带来的好处是在遇到
type(v) == "table" and v.tag="h1"这样的表达式时不会导致运行错误;
同
python相同,
lua中没有
C/
Java/
JavaScript中的三目运算符(
max = a > b ? a : b),如想达到三目运算符的效果,通过如下方式实现即可:
# python max = a if a > b else b -- lua max = (a > b) and a or b -- 此情况下a必须为真,否则实现不了三目运算符的功能 if a > b then max = a else max = b end
4. 操作符优先级
这里我们没有列出操作符的优先级,也不建议去刻意记忆该优先级,任何情况下都建议使用()解决优先级问题,既不会出错,又能提高代码的可读性。
5. table构造式
同样,在Lua(一)——类型与值我们就提到过lua中table类型的初始化及赋值方法,但初始化及赋值table远不止一种方式,以下方式均是合法、正确的:
tableBlank = {} tableBlank.hobbies = {"basketball", "ping-pong", "volleyball"} tableBlank["school"] = "BIT" tableBlank[-100] = -100 -- 这种方式可以使用负数/特殊符号作为key tableBlank["+"] = "add" print(tableBlank.hobbies[1]) -- basketball print(tableBlank[-100]) -- -100 print(tableBlank["+"]) -- add tableWeek = {"Sunday", "Monday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"} for i = 1, #tableWeek do print(tableWeek[i]) end --[[ Sunday Monday ... Saturday --]] tableMixed = {name="Tom", sex="male", age=20, 176, 64.5, [0]="zero"} print(tableMixed.name) -- Tom print(tableMixed.sex) -- male print(tableMixed[1]) -- 176 print(tableMixed[0]) -- zero除了初始化及赋值,关于table还有两个类似“语法糖”知识点:在table构造式的最后一个元素后写逗号是合法、正确的,如
tableDot = {[1]="red", [2]="green",}。这对于要生成table的
lua程序来说很灵活,无需区别对待最后一个元素;
在table构造式中可以使用
;来代替
,,两者作用完全等同,如
tableSymbol = {name="Lucy";sex="male",age=20}。
和函数相关的内容我们放到之后的博客中进行讲解,敬请关注。完。
相关文章推荐
- 详解Lua中的表的概念及其相关操作方法
- Lua编程示例(二):面向对象、metatable对表进行扩展
- 把Lua编译进nginx步骤方法
- Lua脚本自动生成APK包
- Lua中的元表(metatable)、元方法(metamethod)详解
- Lua中的metatable介绍
- Lua中ipair和pair的区别
- Lua中的函数精讲笔记
- 浅谈Lua的面向对象特性
- 详解Lua中的变量相关知识点
- Lua脚本语言入门笔记
- Lua脚本调用外部脚本
- 详解Lua中的if语句的使用方法
- Lua中调用函数使用点号和冒号的区别
- Lua中的闭合函数、非全局函数与函数的尾调用详解
- Lua中强大的元方法__index详解
- Lua中调用C++函数示例
- Lua面向对象之类和继承浅析
- Lua性能优化技巧(一):前言
- Lua中获取table长度问题探讨