中文编程入门(Lua5.4.6中文版)第六章 Lua 运算符

本文通过游戏比喻,阐述了Lua编程语言中算术、关系和逻辑运算符的应用,如加减乘除、比较、逻辑运算以及字符串连接,强调了运算符优先级在编程中的重要性,如同英雄在战斗中的策略选择。

在网游的战斗世界里,我们同样可以借用各种“技能”来理解Lua语言中的运算符。想象一下这些运算符就像是英雄们施展的不同招式:

算术招式

在网游的经济系统中,假设你操控的英雄A拥有500金币,英雄B则有1000金币。

  • 加法:A与B金币相加(A + B),相当于双方金币合并,结果是1500金币。
  • 减法:A从B那里扣除金币(A - B),那么A将获得额外的500金币,而B剩余500金币。
  • 乘法:A与B通过合作任务共同赚取金币(A * B),团队总共可以获得500,000金币的收益。
  • 除法:B平分给A一部分金币(B / A),每位英雄按照当前比例分配的话,A可得2份金币(因为1000 ÷ 500 = 2)。
  • 取余:若B使用A的一件价值恰好能用完其金币的装备(B % A),由于B的金币多于A,在这个例子中没有剩余零配件的情况;但若假设A有一件价值150金币的装备,那么B购买后会剩下850金币(1000 % 150 = 850)。
  • 乘幂:A提升自身能力等级到平方(A^2),这里我们可以理解为如果每1金币对应一定战斗力,那么当A将其金币翻倍时,战斗力增加至250,000(500^2)。
  • 负号:逆转A的金币增益(-A),这意味着A遭受了一次损失,金币减少500,变为-500金币(在游戏中通常不会出现负金币,此处仅为数学运算概念)。

实例

我们可以通过以下实例来更加透彻的理解算术运算符的应用:

-- 定义英雄甲和乙的金币数量
局部 甲的金币 = 500
局部 乙的金币 = 1000

-- 算术招式应用
-- 加法
局部 加法 = 甲的金币 + 乙的金币
输出("加法:", 加法) -- 输出:1500

-- 减法(这里理解为乙给甲金币)
局部 减法 = 乙的金币 - 甲的金币
输出("减法后甲的金币:", 甲的金币 + 减法) -- 输出:1000 (假设甲得到了这500金币)

-- 乘法(团队收益)
局部 乘法 = 甲的金币 * 乙的金币
输出("团队收益金币数:", 乘法) -- 输出:500000

-- 除法(平分金币)
局部 除法 = 乙的金币 / 甲的金币
输出("乙的金币是甲的:", 除法,"倍") -- 输出:2.0

-- 取余
-- 假设有一个价值150金币的装备
局部 除法 = 乙的金币 / 150
局部 取余 = 乙的金币 % 150
输出("购买",除法,"套装备后剩余金币:", 取余) -- 输出:100

-- 乘幂
局部 乘幂 = 甲的金币 ^ 2
输出("能力等级提升后的战斗力:", 乘幂) -- 输出:250000

-- 负号(损失金币)
局部 负号 = -甲的金币
输出("遭受损失后的金币数(仅作演示,游戏中通常不会有负金币):", 负号) -- 输出:-500

显示答案如下: 

C:\lua> lua 算术运算.lua
加法:  1500
加法:  1500
减法后甲的金币:        1000
团队收益金币数:        500000
乙的金币是甲的:        2.0     倍
购买几套装备后剩余金币:        100
购买6.0套装备!
能力等级提升后的战斗力:        250000.0
遭受损失后的金币数(仅作演示,游戏中通常不会有负金币):

关系对决

设定英雄A的生命值为250点,英雄B的生命值为200点。

  • 等于:判断A和B生命值是否相同(A == B),结果显示不相等。
  • 不等于:检测A与B生命值是否不同(A ~= B),确实如此。
  • 大于:比较A的生命值是否高于B(A > B),答案是肯定的。
  • 小于:看A的生命值是否低于B(A < B),这不成立。
  • 大于等于:查看A的生命值是否不低于B(A >= B),本例中不满足条件。
  • 小于等于:确认A的生命值是否不高于B(A <= B),结论正确。

逻辑联手

以两位英雄的状态为例,A处于战斗状态(true),B暂时撤退(false)。

  • 逻辑与:如果A和B同时作战(A and B),协同攻击无法触发。
  • 逻辑或:只要A或B中有任意一位在战场(A or B),即可保持攻势。
  • 逻辑非:否定A和B同时作战的情况(not(A and B)),这个否定成立。
A 与 B
A 或 B
非 (A 与 B)

连接与计数魔法

两个英雄口号相连形成更强的战意:

  • .. 连接符:英雄A的口号"英雄"与英雄B的口号"无敌"组合起来,形成合力口号"英雄无敌"。
  • # 长度探测:测量口号"Battle!"(#"Battle!")或队伍名称"Test"(#"Test")的字符数量。
输出("英雄".."无敌")         --- 结果是"英雄无敌"
输出(#"Battle!")             --- 结果是5
输出(#"Test")                --- 结果是4

操作符优先级

就像英雄释放技能的顺序影响着战场局势一样,在Lua中运算符也有执行优先级:

  • 先施展最高阶的强化魔法(指数运算符^)
  • 接着单体强化(逻辑非not、负号-)
  • 再来是群体BUFF叠加(算术运算符*、/、+、-、..)
  • 最后是位置关系调整(关系运算符<、>、<=、>=、~=、==)
  • 组合技生效规则(and、or)

通过实战演练(示例代码运行),我们可以看到不同的计算策略如何影响最终的结果数值,就如同英雄们根据战场形势采取不同的战术配合。

lua中文教程,原名:programming in lua 目录 版权声明..............i 译序..i 目录iii 第一篇语言.......1 第0章序言.......1 0.1 序言..........1 0.2 Lua的使用者................2 0.3 Lua的相关资源............3 0.4 本书的体例.................3 0.5 关于本书...3 0.6 感谢..........4 第1章起点.......5 1.1 Chunks.......5 1.2 全局变量...7 1.3 词法约定...7 1.4 命令行方式.................7 第2章类型和值9 2.1 Nil..............9 2.2 Booleans....9 2.3 Numbers...10 2.4 Strings......10 2.5 Functions.12 2.6 Userdata and Threads.12 第3章表达式..13 3.1 算术运算符...............13 3.2 关系运算符...............13 3.3 逻辑运算符...............13 3.4 连接运算符...............14 3.5 优先级.....15 3.6表的构造..154章基本语法................18 4.1 赋值语句.18 4.2 局部变量与代码块(block)......19 4.3 控制结构语句...........20 Programming in Lua iv Copyright ® 2005, Translation Team, www.luachina.net 4.4 break和return语句......23 第5章函数......24 5.1 返回多个结果值.......25 5.2可变参数..27 5.3 命名参数.28 第6章再论函数................30 6.1 闭包........32 6.2 非全局函数...............34 6.3 正确的尾调用(Proper Tail Calls)...36 第7章迭代器与泛型for....40 7.1 迭代器与闭包...........40 7.2 范性for的语义...........42 7.3 无状态的迭代器.......43 7.4 多状态的迭代器.......44 7.5 真正的迭代器...........45 第8章编译·运行·调试47 8.1 require函数.................49 8.2 C Packages.................50 8.3 错误........51 8.4 异常和错误处理.......52 8.5 错误信息和回跟踪(Tracebacks)....53 第9章协同程序................56 9.1 协同的基础...............56 9.2 管道和过滤器...........58 9.3 用作迭代器的协同...61 9.4 非抢占式多线程.......63 第10章完整示例..............68 10.1 Lua作为数据描述语言使用........68 10.2 马尔可夫链算法.....71 第二篇 tables与objects........75 第11章数据结构..............76 11.1 数组......76 11.2 阵和多维数组.........77 11.3 链表......78 11.4 队列和双端队列.....78 11.5 集合和包.................80 11.6 字符串缓冲.............80 第12章数据文件与持久化..................84 12.1 序列化...86 Programming in Lua v Copyright ® 2005, Translation Team, www.luachina.net 第13章 Metatables and Metamethods...92 13.1 算术运算的Metamethods............92 13.2 关系运算的Metamethods............95 13.3 库定义的Metamethods................96 13.4 表相关的Metamethods................97 第14章环境..103 14.1 使用动态名字访问全局变量...103 14.2声明全局变量........104 14.3 非全局的环境.......106 第15章 Packages.............109 15.1 基本方法...............109 15.2 私有成员(Privacy)................111 15.3 包与文件................112 15.4 使用全局表............113 15.5 其他一些技巧(Other Facilities)...115 第16章面向对象程序设计.................118 16.1 类.........119 16.2 继承.....121 16.3 多重继承...............122 16.4 私有性(privacy)...................125 16.5 Single-Method的对象实现方法127 第17章 Weak表...............128 17.1 记忆函数...............130 17.2 关联对象属性.......131 17.3 重述带有默认值的表...............132 第三篇标准库134 第18章数学库................135 第19章 Table库...............136 19.1数组大小................136 19.2 插入/删除..............137 19.3 排序.....137 第20章 String库..............140 20.1 模式匹配函数.......141 20.2 模式.....143 20.3 捕获(Captures).146 20.4 转换的技巧(Tricks of the Trade)151 第21章 IO库..157 21.1 简单I/O模式..........157 21.2 完全I/O 模式........160 Programming in Lua vi Copyright ® 2005, Translation Team, www.luachina.net 第22章操作系统库........165 22.1 Date和Time............165 22.2 其它的系统调用...167 第23章 Debug库..............169 23.1 自省(Introspective)..............169 23.2 Hooks...173 23.3 Profiles.174 第四篇 C API..177 第24章 C API纵览..........178 24.1 第一个示例程序...179 24.2 堆栈.....181 24.3 C API的错误处理..186 第25章扩展你的程序....188 25.1 表操作.189 25.2 调用Lua函数.........193 25.3 通用的函数调用...195 第26章调用C函数..........198 26.1 C 函数..198 26.2 C 函数库................200 第27章撰写C函数的技巧..................203 27.1 数组操作...............203 27.2 字符串处理...........204 27.3 在C函数中保存状态.................207 第28章 User-Defined Types in C........212 28.1 Userdata.................212 28.2 Metatables..............215 28.3 访问面向对象的数据...............217 28.4 访问数组...............219 28.5 Light Userdata........220 第29章资源管理............222 29.1 目录迭代器...........222 29.2 XML解析...............225
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值