[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里面使用

image


小知识:lua查找变量的一般规律

首先 会自动查找当前代码块内的局部变量有没有叫这个名字的 如果没有再扩大范围继续找上一层的局部变量 找到最后还没有就找全局变量

image

image当前代码块没找到xx这个变量于是进入上一层 看看这层有没有


小知识:判断当前代码块范围

image


2 外部局部变量 这种变量是非常特殊 涉及到闭包的知识

后面再补充

posted @ 2019-07-11 18:58  点-滴  阅读(365)  评论(0编辑  收藏  举报