[lua]紫猫lua教程-命令宝典-L1-01-05. if判断结构
L1[if]01. 简单的if判断结构
没什么说得 if得基本结构如下
xxx=100
if (xxx>0 and xxx<=100) then
testlib.traceprint("1-100")
elseif (xxx>100 and xxx<=200) then
testlib.traceprint("101-200")
elseif (xxx>200 and xxx<=300) then
testlib.traceprint("201-300")
else
testlib.traceprint("未知")
end
注意
1.条件用括号包含
2if对应得是end 而不是end if
L1[if]02. else否则
没什么说得
L1[if]03. elseif否则如果
L1[if]04. 并列与嵌套if
L1[if]05. 两大容易犯错的判断比较
1.比较的时候两边的变量类型不一致 会报错 一般用tostring() 和 tonumber() 来强制转化类型来比较
注意 tonumber() 有的时候无法转化参数变成数值 会返回nil
xxxx=10
yyyy="dfsfd"
testlib.traceprint(tonumber(yyyy))--结果为nil
if (tonumber(xxxx)>tonumber(yyyy)) then --这里直接报错 因为左侧是10 而右侧是nil类型 无法比较
testlib.traceprint("xxxx")
else
testlib.traceprint("yyyy")
end
解决办法:把两边都转化为字符串再比较tonumber()有时候会返回nil 但是转化字符串的tostriing()函数却没有这个问题
xxxx=10
yyyy="dfsfd"
--testlib.traceprint(tonumber(yyyy))--结果为nil
if (tostring(xxxx)>tostring(yyyy)) then --这里两边都转为字符串再比较
testlib.traceprint("xxxx")
else
testlib.traceprint("yyyy")
end
结论:为了避免出现这种 两边类型不同导致的代码报错的情况
比较是否相等 都转成字符串然后比较即可 这样就不会存在报错的可能性了 当然 事先你要确定两边比较的变量类型是一致的才行
比较哪个大哪个小 就复杂了
如果确定变量类型为字符串 那么直接tostring()即可
如果确定变量类型为数值 虽然可以用tostring() 然后比较即可 但是不排除万一里面有一项是十六进制 或者科学记数法 最终还是要都tonumber来比较
想了半天 如果想要避免比较大小不出错 勉强写了一个函数先凑合用 仅供参考 或许是我自己想的太多了把
--[[
功能:判断两个数哪个大哪个小
返回:返回1表示前面大 返回0表示一样大返回-1 表示后面大
--]]
function whichMax(x,y)
local a=tonumber(x)
local b=tonumber(y)
local result=-1 if (not a) then--万一第一个数无法转化为数值
result=-1
elseif (not b) then
result=1--万一第二个数无法转化为数值
elseif (a>b) then
result=1
elseif (a==b) then--相等返回0
result=0
elseif (a<b) then
result=-1
end
return result --把判断结果返回
end
testlib.traceprint(whichMax(10,20))
testlib.traceprint(whichMax(30,20))
testlib.traceprint(whichMax(10,"fsdf"))
testlib.traceprint(whichMax("40",20))
123
L1[if]06. 局部变量与全局变量
全局变量:lua下 不用local声明的变量都是全局变量 全局变量的作用范围(是整个项目)不单单当前文件 如果当前文件被其他源码调用 这个全局变量依然可以再其他页面直接使用
局部变量:以local声明的是局部变量 局部变量只能作用于声明的代码块里
特殊的局部变量
1.在文件在外层声明的局部变量 这种局部变量相对于当前文件 其实就是全局变量 虽然它的作用范围只限于当前文件 而真正的全局变量的作用范围是整个项目
下面代码而言 do..end里面是独立的代码块 xx这个变量用local声明了 但是 依然可以在下面的do..end里面使用
小知识:lua查找变量的一般规律
首先 会自动查找当前代码块内的局部变量有没有叫这个名字的 如果没有再扩大范围继续找上一层的局部变量 找到最后还没有就找全局变量
当前代码块没找到xx这个变量于是进入上一层 看看这层有没有
小知识:判断当前代码块范围
2 外部局部变量 这种变量是非常特殊 涉及到闭包的知识
后面再补充
[lua]紫猫lua教程-命令宝典-L1-01-05. if判断结构的更多相关文章
- [lua]紫猫lua教程-命令宝典-L1-01-03. 数值数据
lua5.3在线手册地址 https://cloudwu.github.io/lua53doc/contents.html#contents 其实我们直接啃手册就够了 推荐如果有基础的先啃手册再看紫 ...
- [lua]紫猫lua教程-命令宝典-L1-01-02. 变量
L1[变量]01. 变量命名规则 命名规则:数字字母下划线构成 但是不能数字开头 不推荐中文名 很多都是不支持中文 但是在一些其他的编辑器里面 比如触摸精灵 之类的 就可以 注意 :变量命名必须要包含 ...
- [lua]紫猫lua教程-命令宝典-L1-01-01. Lua环境与IDE
网上大把的lua教程 不过紫猫老师的教程向来都是讲的非常仔细 所以最近天气已经36+了 魔兽世界还需要冲飞行声望 懒得写单子根本没有单子,正好认认真真的看下紫猫老师的lua教程 紫猫老师的lua教 ...
- [lua]紫猫lua教程-命令宝典-L1-01-04. 字符串数据
L1[字符串]01. 单引号与双引号 没什么说得 字符串:以双引号包含 或者单引号包含 或者[[]]包含 L1[字符串]02. 长文本内容 小知识:如果用[[]]包含字符串内容 但是字符串内容里面 包 ...
- [lua]紫猫lua教程-命令宝典-L1-01-10. 自定义函数
L1[function]01. 定义与调用函数 函数的定义 和概念 没什么可说的 lua的函数声明和调用是有先后顺序的 先声明后调用 函数就是变量的一种 所以可以自由的把函数在变量间相互赋值 不过注 ...
- [lua]紫猫lua教程-命令宝典-L1-01-08. math数学函数库
L1[math]01. 取绝对值 L1[math]02. 三角函数 小知识:注意 lua下三角函数用的参数是弧度 而不是角度 弧度=角度*pi/180 -->弧度角度换算公式 lua的mat ...
- [lua]紫猫lua教程-命令宝典-L1-01-07. table表
L1[table]01. table表的定义与赋值 小知识:声明表的例子 xx={}--创建一个空表xx --给这表的元素赋值 test="a" xx[test]="a& ...
- [lua]紫猫lua教程-命令宝典-L1-01-06. 循环结构
L1[循环]01. for循环结构介绍 只是简单的说了下计数型的for循环结构 for i=1,10,1 do testlib.traceprint(i) end 注意几点: 1.上面的1和10表示循 ...
- [lua]紫猫lua教程-命令宝典-L1-03-01. 闭包
L1[闭包]01. 函数的传递赋值 没什么说的 1.函数作为变量来看 可以轻松的声明 相互赋值 2.函数变量本质是 一个内存指针 所以函数变量的相互赋值不是传递的函数本身 而是指向这个函数的内存地址 ...
随机推荐
- sql 注释解释
1 2 3 4 CREATE TABLE groups( gid INT PRIMARY KEY AUTO_INCREMENT COMMENT '设置主键自增', gname VARCHAR( ...
- Python三次握手和四次挥手
先要了解什么是传输层 博客中网络协议基础编有详细介绍 https://www.cnblogs.com/toby-yu/p/12357598.html TCP三次握手和四次挥手 1.三次握手 首先Cli ...
- arm汇编笔记
ARM汇编(非虫笔记) 1.ARM汇编的目的: 分析elf文件的需要. 2.原生程序生成过程. (1)预处理,编译器处理c代码中的预处理指令. gcc -E hello.c -o hello.i (2 ...
- 浅谈radis
1.概述 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API 从2010年3月15日起,Redis的开发工作由VM ...
- Gogs的Docker容器化部署流程遇到的问题
Gogs的Docker容器化部署流程遇到的问题 最近在学习CI/CD的一些方案,个人比较青睐容器化轻量级.CI方面一开始是想使用gitlab的,但是发现我自己买的服务器配置太低,内存根本不够(大写 ...
- python之路正则表达式
元字符 蓝色框中有非贪婪模式也不起作用,非贪婪模式在+后加上?号 有空字符串
- go语言 RSA数字签名和验证签名
package main import ( "crypto" "crypto/rand" "crypto/rsa" "crypto ...
- win10中批量新建文件夹
1.新建一个bat文件,如[批量新建.bat].或者新建txt文件,输入完内容后重命名为bat文件 2.建议用notepad软件打开文件,首先确定编码格式为ANSI编码 (否则最后出现的效果是乱码,不 ...
- SQL With As的用法
WITH AS,也叫子查询部分(subquery factoring),可以定义一个SQL片断,该SQL片断会被整个SQL语句用到.可以使SQL语句的可读性更高,也可以在UNION ALL的不同部分, ...
- 三、统一威胁管理(UTM)
简介 统一威胁管理(Unified Threat Management),简称UTM. 2004年9月,IDC首度提出“统一威胁管理”的概念,即将防病毒.入侵检测和防火墙安全设备划归统一威胁管理(Un ...