Lua(二)——表达式

Lua的表达式中可以包含数字常量、字面字符串、变量、一元和二元操作符及函数调用。表达式中还可以包括函数定义和table构造式。

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为非负整数

以这种方式保留小数不会出现进位的情况(即“五入”)。在其他语言中也可以使用这种方式,只是由于单精度浮点数存在四舍五入的问题,可能会造成一些误差。在JavaScriptpython中,

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为非负整数,自动四舍五入

一元算数操作符:

-   负号

2. 关系操作符

lua中有以下关系操作符,用来进行比较操作:

<   小于
>   大于
<=  小于等于
>=  大于等于
==  等于
~=  不等于

所有比较操作的结果都是true或false。需要注意以下几点:

  1. 和其他大多数编程语言不同,不等于比较符为~=,而不是!=
  2. nil只与其自身相等;
  3. lua在比较操作时不会做自动转型,类型不同的两个值永远不等。在遇到string和number比较时,lua会抛出错误;
  4. table/function/userdata三种类型是做引用比较的,即 a = {} a.x = 1 b = {} b.x = 1 print(a == b) -- false

3. 逻辑操作符

python完全相同,lua使用如下保留字作为逻辑操作符:

and 与
or  或
not 非

关于运算符要注意一下几点:

  1. Lua(一)——类型与值我们就提到过,lua只将false和nil视为假,其他任何值包括0与空字符串都视为真;
  2. lua中的and/or为短路与和短路或,所谓短路,是指一旦逻辑判断结果已定时不会继续向后做判断,这样带来的好处是在遇到type(v) == "table" and v.tag="h1"这样的表达式时不会导致运行错误;
  3. 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还有两个类似“语法糖”知识点:

  1. 在table构造式的最后一个元素后写逗号是合法、正确的,如tableDot = {[1]="red", [2]="green",}。这对于要生成table的lua程序来说很灵活,无需区别对待最后一个元素;
  2. 在table构造式中可以使用;来代替,,两者作用完全等同,如tableSymbol = {name="Lucy";sex="male",age=20}

和函数相关的内容我们放到之后的博客中进行讲解,敬请关注。

完。

时间: 2024-10-12 16:34:22

Lua(二)——表达式的相关文章

[.net 面向对象程序设计进阶] (5) Lamda表达式(二) 表达式树快速入门

[.net 面向对象程序设计进阶] (6) Lamda表达式(二) 表达式树快速入门 本节导读: 认识表达式树(Expression Tree),学习使用Lambda创建表达式树,解析表达式树. 学习表达式在程序设计中的优点:比如构造动态查询.动态构造表达式树完成未知对象属性访问,比反射的性能高出很多.我们可以说表达式树才是Lambda的精髓,是我们必须要熟练掌握并灵活运用的. 1.关于表达式树(Expression Tree) 表达式树以树形数据结构表示代码,其中每一个节点都是一种表达式,比如

Lua学习----Lua的表达式

前言 Lua的运算符和其他语言基本类似.但也有一点点区别 1.算术运算符 Lua的算术运算符加入了指数运算符^ print(2 ^ 10) -->打印 1024. 求2的10次方 2.关系运算符 Lua的不等运算符符号为~=,并不是!= Lua在做"=="等于判断时,Lua是做引用比较的,也就是说,只要两个变量引用同一个对象(这里只对对象起作用,其他的如字符串,数字都是普通变量)时,才认为他们相等. local a={ x = 1, y = 0} local b={ x = 1,

TypeScript 学习二 表达式和循环

表达式: 1,箭头表达式: 用来声明匿名函数,消除了传统匿名函数的this指针问题: 1) 例:简单的方法体为单行的方法,此时不需要大括号和return方法,表达式自动处理了: 如果方法体是多行的内容且有return语句时,就需要大括号了:

栈应用二(表达式求值)

问题;设计一个程序,演示用算符优先法对算术表达式求值的过程.利用算符优先关系,实现对算术四则混合运算表达式的求值.(1)输入的形式:表达式,例如3+2*6-4     包含的运算符只能有'+' .'-' .'*' .'/'(目前还不兼容括号) :(2)输出的形式:运算结果,例如3+2*6-4=11: (3)程序所能达到的功能:对表达式求值并输出:示例:①3+2*6-4 ②30+20*6-80 ③2*7-3*5-3 思路:1.程序扫描表达式,一个一个的扫描2.当发现这个字符是数字的时候,直接入数栈

Lua 第三章--表达式

表达式用于表示值.Lua的表达式中可以包含数字常量.字面字符串.变量.一元和二元操作符及函数调用.另外有别于传统的是,表达式中还可以包括函数定义和table构造式. Lua支持常规的算术操作符有:二元的+.-.*./.^.%,及一元 - (负号).取模操作符计算结果的符号永远与第二个参数相同. Lua提供的关系操作符有:>.<.>=.<=.==.~=.所有这些操作符的运算结果都是true或false. 逻辑操作符有and.or 和not .与条件控制语句一样,所有的逻辑操作符将fa

lua【卤鹅】总结

转自:https://www.cnblogs.com/reblue520/p/10767428.html 编写一个简单的hello world程序 test.lua 如果觉得简单,可以给一个for循环,打印1~10 正常执行,说明lua环境安装没有问题 二.lua语言的基本语法 lua的值和类型 数值: 1,2,3 1.2 3.14 字符类型 "hello world" Table类型 --lua的table,不需要预定义长度,保证数组在首次赋值的时候在最大索引加1 --没有类型限制

postgresql----唯一索引,表达式索引,部分索引

一.唯一索引 唯一索引字面上理解就是在索引上增加唯一约束,不允许出现索引值相同的行,目前只有Btree索引可以声明唯一索引,唯一键会自动创建唯一索引. 测试表: test=# create table tbl_unique_index(a int, b int); CREATE TABLE 示例1.创建唯一索引,相等数据只允许插入一行,NULL除外,因为NULL不等于NULL. test=# create unique index idx_unq_tbl_unique_index_a_b on

Lua学习笔记9:多文件

一 终端中执行多个文件:-l 加入在文件一中定义了一个变量,在另一文件中输出这个变量,代码如下: --file1.lua num = 100 --file2.lua print(num) 终端输入(注意:不是lua命令行): lua -lfile1 -lfile2 注意:不要加上文件后缀名.lua 二 命令行中加载文件 --lib.lua function norm(x, y) local n2 = x^2 + y^2 return math.sqrt(n2) end function twic

day1-字符串拼接、表达式、break和continue

一 字符串拼接方式 1. 用加号(+)拼接 name = 'eason' age = 18 info = '''---info:'''+ name +''' age: ''' + str(age) print(info) 2. 用占位符(%)拼接 name = "eason" age = 18 info = '''-----info----- name: %s age: %d ''' % (name,age) print(info) 3. 用format方法拼接 1.关键字拼接(官方推