L1[if]01. 简单的if判断结构

没什么说得 if得基本结构如下

  1. xxx=100
  2. if (xxx>0 and xxx<=100) then
  3. testlib.traceprint("1-100")
  4. elseif (xxx>100 and xxx<=200) then
  5. testlib.traceprint("101-200")
  6. elseif (xxx>200 and xxx<=300) then
  7. testlib.traceprint("201-300")
  8. else
  9. testlib.traceprint("未知")
  10. 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

  1. xxxx=10
  2. yyyy="dfsfd"
  3. testlib.traceprint(tonumber(yyyy))--结果为nil
  4. if (tonumber(xxxx)>tonumber(yyyy)) then --这里直接报错 因为左侧是10 而右侧是nil类型 无法比较
  5. testlib.traceprint("xxxx")
  6. else
  7. testlib.traceprint("yyyy")
  8. end

解决办法:把两边都转化为字符串再比较tonumber()有时候会返回nil 但是转化字符串的tostriing()函数却没有这个问题

  1. xxxx=10
  2. yyyy="dfsfd"
  3. --testlib.traceprint(tonumber(yyyy))--结果为nil
  4. if (tostring(xxxx)>tostring(yyyy)) then --这里两边都转为字符串再比较
  5. testlib.traceprint("xxxx")
  6. else
  7. testlib.traceprint("yyyy")
  8. end

结论:为了避免出现这种 两边类型不同导致的代码报错的情况

比较是否相等 都转成字符串然后比较即可 这样就不会存在报错的可能性了 当然 事先你要确定两边比较的变量类型是一致的才行

比较哪个大哪个小 就复杂了

如果确定变量类型为字符串 那么直接tostring()即可

如果确定变量类型为数值 虽然可以用tostring() 然后比较即可 但是不排除万一里面有一项是十六进制 或者科学记数法 最终还是要都tonumber来比较

想了半天 如果想要避免比较大小不出错 勉强写了一个函数先凑合用 仅供参考 或许是我自己想的太多了把

  1. --[[
  2. 功能:判断两个数哪个大哪个小
  3. 返回:返回1表示前面大 返回0表示一样大返回-1 表示后面大
  4. --]]
  5. function whichMax(x,y)
  6. local a=tonumber(x)
  7. local b=tonumber(y)
  8. local result=-1
  9.  
  10. if (not a) then--万一第一个数无法转化为数值
  11. result=-1
  12. elseif (not b) then
  13. result=1--万一第二个数无法转化为数值
  14. elseif (a>b) then
  15. result=1
  16. elseif (a==b) then--相等返回0
  17. result=0
  18. elseif (a<b) then
  19. result=-1
  20. end
  21. return result --把判断结果返回
  22. end
  23. testlib.traceprint(whichMax(10,20))
  24. testlib.traceprint(whichMax(30,20))
  25. testlib.traceprint(whichMax(10,"fsdf"))
  26. 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判断结构的更多相关文章

  1. [lua]紫猫lua教程-命令宝典-L1-01-03. 数值数据

    lua5.3在线手册地址  https://cloudwu.github.io/lua53doc/contents.html#contents 其实我们直接啃手册就够了 推荐如果有基础的先啃手册再看紫 ...

  2. [lua]紫猫lua教程-命令宝典-L1-01-02. 变量

    L1[变量]01. 变量命名规则 命名规则:数字字母下划线构成 但是不能数字开头 不推荐中文名 很多都是不支持中文 但是在一些其他的编辑器里面 比如触摸精灵 之类的 就可以 注意 :变量命名必须要包含 ...

  3. [lua]紫猫lua教程-命令宝典-L1-01-01. Lua环境与IDE

    网上大把的lua教程  不过紫猫老师的教程向来都是讲的非常仔细 所以最近天气已经36+了 魔兽世界还需要冲飞行声望  懒得写单子根本没有单子,正好认认真真的看下紫猫老师的lua教程 紫猫老师的lua教 ...

  4. [lua]紫猫lua教程-命令宝典-L1-01-04. 字符串数据

    L1[字符串]01. 单引号与双引号 没什么说得 字符串:以双引号包含 或者单引号包含 或者[[]]包含 L1[字符串]02. 长文本内容 小知识:如果用[[]]包含字符串内容 但是字符串内容里面 包 ...

  5. [lua]紫猫lua教程-命令宝典-L1-01-10. 自定义函数

    L1[function]01. 定义与调用函数 函数的定义 和概念 没什么可说的 lua的函数声明和调用是有先后顺序的  先声明后调用 函数就是变量的一种 所以可以自由的把函数在变量间相互赋值 不过注 ...

  6. [lua]紫猫lua教程-命令宝典-L1-01-08. math数学函数库

    L1[math]01. 取绝对值 L1[math]02. 三角函数 小知识:注意 lua下三角函数用的参数是弧度 而不是角度 弧度=角度*pi/180  -->弧度角度换算公式  lua的mat ...

  7. [lua]紫猫lua教程-命令宝典-L1-01-07. table表

    L1[table]01. table表的定义与赋值 小知识:声明表的例子 xx={}--创建一个空表xx --给这表的元素赋值 test="a" xx[test]="a& ...

  8. [lua]紫猫lua教程-命令宝典-L1-01-06. 循环结构

    L1[循环]01. for循环结构介绍 只是简单的说了下计数型的for循环结构 for i=1,10,1 do testlib.traceprint(i) end 注意几点: 1.上面的1和10表示循 ...

  9. [lua]紫猫lua教程-命令宝典-L1-03-01. 闭包

    L1[闭包]01. 函数的传递赋值 没什么说的 1.函数作为变量来看 可以轻松的声明 相互赋值 2.函数变量本质是 一个内存指针 所以函数变量的相互赋值不是传递的函数本身 而是指向这个函数的内存地址 ...

随机推荐

  1. 【PAT甲级】1118 Birds in Forest (25分)(并查集)

    题意: 输入一个正整数N(<=10000),接着输入N行数字每行包括一个正整数K和K个正整数,表示这K只鸟是同一棵树上的.输出最多可能有几棵树以及一共有多少只鸟.接着输入一个正整数Q,接着输入Q ...

  2. 2019牛客多校第八场A All-one Matrices 悬线法,单调栈待补

    All-one Matrices 题意 对于一个n,m的01矩阵,问有多少个极大矩阵. 分析 对于悬线法来说,其过程就是枚举极大矩阵的过程,那如何计数呢?对于一个点来说,若其左右边界包含了上一个点的悬 ...

  3. JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了为 maxJsonLength 属性设置的值

    在.net mvc的controller中,方法返回JsonResult,一般我们这么写:   [HttpPost]   public JsonResult QueryFeature(string u ...

  4. axios的基本用法与并发请求

    一.axios的基本用法 <router-link to="" class="a1" @click.native="logins"&g ...

  5. python:复制文件及文件夹

    #!/usr/bin/python# -*- coding:utf-8 -*- import shutil #shutil.copy(文件1,文件2)#将源内容复制到目标文件中.d.txt不存在则创建 ...

  6. python UI自动化之处理多窗口

    前言 有些页面的链接打开后,会重新打开一个窗口,想要在新页面上操作,就需要先切换窗口了.获取窗口的唯一标识用句柄表示,所以只需要切换句柄,我们就能在多个页面上灵活自如的操作了. 1.元素有属性,浏览器 ...

  7. linux添加新的环境变量

    Linux下设置PYTHONPATH环境变量有三种方法:一种作用于当前终端,一种作用于当前用户,一种作用于所有用户. 1.作用于当前终端,直接当前终端输入命令 $ export PYTHONPATH= ...

  8. LaTeX竖立公式符号

    1.LaTeX技巧668:LaTeX如何实现直立积分号 \usepackage{amsmath,amssymb} \DeclareSymbolFont{EulerExtension}{U}{euex} ...

  9. (转)数据索引BTree

    .B-tree 转自:http://blog.csdn.net/hbhhww/article/details/8206846 B-tree又叫平衡多路查找树.一棵m阶的B-tree (m叉树)的特性如 ...

  10. vs2019 scanf 解决 C4996问题

    1. 首先选择项目 2. 然后选择最下面那行的 工程属性, 其后于此处 3. 添加上 :_CRT_SECURE_NO_WARNINGS 最后保存,使用 scanf 读取即无报错了