为什么⎕SIGNAL没有被::错误防护程序捕获?

时间:2019-05-05 09:11:00

标签: error-handling scope apl dyalog

      {11::¯1 ⋄ 2÷0}⍬
¯1
      {11::¯1 ⋄ ⎕SIGNAL 11}⍬
DOMAIN ERROR

为什么捕获到第一个信号而没有捕获第二个信号?

1 个答案:

答案 0 :(得分:1)

根据the documentation for ⎕SIGNAL(我的重点):

  

状态指示符可以 切回以退出该函数 ,或者退出包含调用⎕SIGNAL的行的运算符,或者状态指示符可以切回以退出执行(调用的{​​{1}})表达式。如果在嵌套dfn中执行,则状态指示符将切回以从包含调用了⎕SIGNAL的行的囊中退出。然后会产生错误。

换句话说,当⎕SIGNAL完成工作时,我们已经在dfn之外,因此dfn的错误防护(⎕SIGNAL)不再有效。

要解决此问题,您必须在单独的胶囊中使用::。例如,您可以在封面 中定义要使用的封面函数:

⎕SIGNAL

或者,您可以将 Signal←{⎕SIGNAL ⍵} {11::¯1 ⋄ Signal 11}⍬ ¯1 放入其自己的执行包中:

⎕SIGNAL