zoukankan      html  css  js  c++  java
  • Lua中assert( )函数的使用

    当Lua遇到不期望的情况时就会抛出错误,比如:两个非数字进行相加;调用一个非函数的变量;访问表中不存在的值等。你也可以通过调用error函数显示的抛出错误,error的参数是要抛出的错误信息。
    assert(a,b) a是要检查是否有错误的一个参数,b是a错误时抛出的信息。第二个参数b是可选的。
    
    print("enter a number:")
    n = io.read("*number")
    if not n then
        error("invalid input")
    end

    Lua提供了专门的内置函数assert( )来完成上述的类似功能

    print("enter a number:")
    n = assert(io.read("*number"), "invalid input")

    assert首先检查的是第一个参数是否返回错误,如果不返回错误,则assert简单返回,否则则以第二个参数抛出异常信息。
    assert()是普通函数,他首先计算两个参数,然后在调用函数,如:

    n = io.read()
    assert(tonumber(n), "invalid input:" .. n .. "is not a number")

    先进行tonumber(n), "invalid input:" .. n .. "is not a number"这两个参数的计算。

    没用assert( )时:

    input = io.read("*number")
    print(input)

    运行结果:

    nil
    [Finished in 0.3s]

    用assert( )时:

    input = assert(io.read("*number"))
    print(input)

    运行结果:

    lua: D:UserProfilesBenLuoDesktopstudy	est.lua:44: assertion failed!
    stack traceback:
        [C]: in function 'assert'
        D:UserProfilesBenLuoDesktopstudy	est.lua:44: in main chunk
        [C]: ?
    [Finished in 0.3s with exit code 1]



    Lua中,assert的作用

    在看《Lua游戏开发实践指南》时,在P34中有说明assert,但是说明特少,导致自己完全不懂所以然,因此自己研究了一下。

    百度百科的解释:

    • Assert(断言)编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设,可以将断言看作是异常处理的一种高级形式。断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真。可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言,而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新起用断言。断言只有在Debug模式下才有效。

    下面结合Lua的例子,来看看Assert具体有什么用:)

    1.「没有Assert的情况」

    1. --这里输入一个数字  
    2. print(string.format("Please Enter A Number:"))  
    3. input = io.read("*number")  
    4. print(input)  

    当输入的是“?”时,结果如下

    可以看到,系统没有报错,可以正常运行。

    2.「有Assert的情况」

    1. --这里输入一个数字  
    2. print(string.format("Please Enter A Number:"))  
    3. input1 = assert(io.read("*number"))  
    4. print(input)  

    当输入的还是“?”时,结果就完全不同了

    可以看到,当有assert包围代码后,遇到错误,会抛出异常,而不会上刚刚那样。这样的用处十分之大,当项目大了之后,出错可以很好地定位到是哪里出错。
  • 相关阅读:
    FTP和SSH的区别
    Hadoop之回收站
    什么是簇?
    linux中环境变量的配置
    windows系统中的系统变量和用户变量,以及配置JDK中各个参数的意义
    linux 中yum和rpm 总结
    ajax请求之async:false/true的作用
    JavaScript eval() 函数的用法
    js模式
    数组的一些操作
  • 原文地址:https://www.cnblogs.com/aibox222/p/9052170.html
Copyright © 2011-2022 走看看