• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Lua中assert( )函数的使用 - echo111333

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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:\UserProfiles\BenLuo\Desktop\study\test.lua:44: assertion failed!
stack traceback:
    [C]: in function \'assert\'
    D:\UserProfiles\BenLuo\Desktop\study\test.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包围代码后,遇到错误,会抛出异常,而不会上刚刚那样。这样的用处十分之大,当项目大了之后,出错可以很好地定位到是哪里出错。

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Lua之ipairs与pairs详解发布时间:2022-07-22
下一篇:
lua笔记发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap