</head> <body> <h1>OnError() <span class="ver">[v1.1.29+]</span></h1> <p>注册一个每当未处理错误发生时自动调用的<a href="../Functions.htm">函数</a>.</p> <pre class="Syntax"><span class="func">OnError</span>(Callback <span class="optional">, AddRemove</span>)</pre> <h2 id="Parameters">参数</h2> <dl> <dt>Callback</dt> <dd> <p>要调用的函数或<a href="../misc/Functor.htm">函数对象</a>的名称. 若要传递原义的函数名称, 将其括在双引号中.</p> <p>回调函数接受两个参数, 可以<a href="../Functions.htm#intro">定义</a>如下:</p> <pre class="NoIndent">MyCallback(Exception) { ...</pre> <p>虽然给参数的名称并不重要, 但它被赋值为抛出值或 <a href="Throw.htm#Exception">Exception</a> 对象. 如果这是一个对象, 则可以修改它以影响默认错误对话框显示.</p> <p>如果不需要相应的信息, 可以省略回调的参数.</p> <p>回调可以返回一个非零的整数来阻止默认的错误对话框.</p> </dd> <dt>AddRemove</dt> <dd><p>如果省略, 则默认为 1. 否则, 指定下列数字之一:</p> <ul> <li>1 = 在所有之前注册的回调之后调用该回调.</li> <li>-1 = 在所有之前注册的回调之前调用该回调.</li> <li>0 = 不调用该回调.</li> </ul> </dd> </dl> <h2 id="Remarks">备注</h2> <p><em>Callback</em> 只在出现错误或异常时才会被调用, 这些错误或异常通常会导致显示错误消息. 它不能被加载时错误调用, 因为 OnError 在脚本加载之后才能被调用.</p> <p>如果任何回调返回一个非零整数, 则线程退出. 如果在回调中发生错误(或抛出异常), 则会为新错误显示错误消息并退出线程. 否则, 将调用所有回调函数, 显示错误消息并退出该线程.</p> <p>在当前<a href="../misc/Threads.htm">线程</a>调用 <em>Callback</em>, 在其退出之前(即在调用堆栈展开之前).</p> <h2 id="Related">相关</h2> <p><a href="Try.htm">Try</a>, <a href="Catch.htm">Catch</a>, <a href="Throw.htm">Throw</a>, <a href="OnExit.htm">OnExit</a></p> <h2 id="Examples">示例</h2> <div class="ex" id="ExBasic"> <p><a class="ex_number" href="#ExBasic"></a> 将脚本造成的错误记录到文本文件中, 而不是显示给用户.</p> <pre>OnError("LogError") %cause% := error LogError(exc) { FileAppend % "Error on line " exc.Line ": " exc.Message "`n" , errorlog.txt return true }</pre> </div> <div class="ex" id="ExObj"> <p><a class="ex_number" href="#ExObj"></a> 与上面相同, 但使用函数对象.</p> <pre>OnError(LogError) %cause% := error class LogError { Call(exc) { FileAppend % "Error on line " exc.Line ": " exc.Message "`n" , errorlog.txt return true } }</pre> </div> </body> </html>