zoukankan      html  css  js  c++  java
  • 关于xpcall函数的解释

    首先放一下官网的解释:

    http://www.lua.org/pil/8.5.html

    通常,当一个错误发生的时候,我们想要更多的debug信息当这个错误运行的时候,至少,我们想要一个堆栈信息,展示完整的指向错误的堆栈调用。当pcall返回的时候,它销毁了一部分函数的调用过程。为了解决这个问题,lua提供了xpcall函数。当这个函数被调用的时候,错误处理函数作为第二个参数。当错误发生的时候,lua在出栈之前会调用这个error处理函数,有两个错误处理函数,debug.debug和debug.traceback函数,当error发生的时候,debug.debug给你一个lua提示。而如果调用debug.traceback的时候,建立了可以追溯函数调用错误信息。后者具有独立解释构建错误的功能。

     1 function myfunction(n)
     2   n = n / 11
     3 end
     4 
     5 function myerrorhandler(err) 
     6   print("ERROR:", err)
     7 end
     8 
     9 
    10 status = xpcall(myfunction, myerrorhandler, 3, 4, 5)
    11 print(status)

    返回的结果是true

     1 function myfunction(n)
     2   n = n / nil 
     3 end
     4 
     5 function myerrorhandler(err) 
     6   print("ERROR:", err)
     7 end
     8 
     9 
    10 status = xpcall(myfunction, myerrorhandler, 3, 4, 5)
    11 print(status)

    返回的结果是:

    ERROR:    test.lua:3: attempt to perform arithmetic on a nil value
    false

    再就是关于调用非本文件的函数的时候,xpcall的参数定义也会发生相应的变化

    -- test1.lua
    test1 = {} function test1:Func(n) print("This is test1.lua, the n is =", n) end test1:Func(n) -- Func(2) return test1
    -- test.lua
    require
    "test1" function myfunction(n) n = n / 2 print("the n is", n) end function myerrorhandler(err) print("ERROR:", err) end status = xpcall(test1.Func, myerrorhandler, test1, 4) print(status)

    如果将xpcall函数中的test1去除,n将都会变成nul

  • 相关阅读:
    php 注册与登录
    php 多条件查询
    php(ajax)异步刷新(转)
    PHP中的6种加密方式
    ajax 异步刷新,需要填写的参数
    php+Mysql 页面登录代码
    php+Mysql页面注册代码
    jquery入门知识点总结(转)
    php+Mysql中网页出现乱码的解决办法详解
    php代码常见错误详解整理
  • 原文地址:https://www.cnblogs.com/letlifestop/p/13152646.html
Copyright © 2011-2022 走看看