programming in lua 初读 9,10,11

初学者,有错误希望指正。

9—————动态连接

--[[lua使用loadlib(库的绝对路径,初始化函数)的函数提供了所有的动态连接的功能。]]
local path="/usr/local/lua/lib/libluasockect.so"
local f=assert(loadlib(path,"luaopen_socket"))
--[[检测错误]]
f()
--[[loadlib函数加载指定的库并连接到lua,然而并不打开库(没有调用初始化函数),返回初始化函数作为lua的一个函数,可以直接在lua中调用,如果加载动态库或查找初始化函数出错,将返回nil和错误信息]]
10————错误
error("错误提示"..a(可以加上变量).."错误提示")
assert( 待检测的函数,"错误提示"..a(可以加上变量).."错误提示")
遇到异常的基本原则:对于程序逻辑上能够避免的异常,以抛出错误的方式处理,否则返回错误代码
11————异常和错误处理 pcall 、xpcall 、debug
--[[pcall接收一个函数和要传递个后者的参数,在保护模式(protected mode)下执行函数内容,同时捕获所有的异常和错误]]
funtion func(i) 
  if 条件 then 
  error()
  else
    print(i)
  end
end
if pcall(func(),i) then 
--pcall(func())=true,返回被执行函数的返回值
else
--pcall(func())=false,返回错误信息
end
local status,errmessage=pcall(function(i) if i>=10 then error() else print(i) end end,33)
--[[执行输出 false   nil]]
pcall(function(i) if i>=10 then print(i+I) else print(i) end end,33)
--[[执行输出 false   stdin:1: attempt to perform arithmetic on a nil value (global 'I')]]
--[[xpall比pcall多接收第二个函数————一个错误处理函数,在调用栈展看(unwind)前调用错误处理函数,使用debug库获取错误的额外信息]]
--[[
debug库提供了两个通用的错误处理函数:
debug.debug:提供一个Lua提示符,让用户来检查错误的原因;
debug.traceback:根据调用桟来构建一个扩展的错误消息
]]
--[[例子1]]
xpcall(function(i) print(i) error('error..') end, function() print(debug.traceback()) end, 33)
--[[执行输出
33
stack traceback:
        stdin:1: in function <stdin:1>
        [C]: in function 'error'
        stdin:1: in function <stdin:1>
        [C]: in function 'xpcall'
        stdin:1: in main chunk
        [C]: in ?
false   nil
]]
--[[例子2]]
function myfunction ()
   n = n/nil
end
function myerrorhandler( err )
   print( "ERROR:", err )
end
status = xpcall( myfunction, myerrorhandler )
print( status)
--[[执行输出
ERROR:    test2.lua:2: attempt to perform arithmetic on global 'n' (a nil value)
false
]]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值