{11::¯1 ⋄ 2÷0}⍬
¯1
{11::¯1 ⋄ ⎕SIGNAL 11}⍬
DOMAIN ERROR
为什么捕获到第一个信号而没有捕获第二个信号?
答案 0 :(得分:1)
根据the documentation for ⎕SIGNAL
(我的重点):
状态指示符可以 切回以退出该函数 ,或者退出包含调用
⎕SIGNAL
的行的运算符,或者状态指示符可以切回以退出执行(调用⍎
的{{1}})表达式。如果在嵌套dfn中执行,则状态指示符将切回以从包含调用了⎕SIGNAL
的行的囊中退出。然后会产生错误。
换句话说,当⎕SIGNAL
完成工作时,我们已经在dfn之外,因此dfn的错误防护(⎕SIGNAL
)不再有效。
要解决此问题,您必须在单独的胶囊中使用::
。例如,您可以在封面 中定义要使用的封面函数:
⎕SIGNAL
或者,您可以将 Signal←{⎕SIGNAL ⍵}
{11::¯1 ⋄ Signal 11}⍬
¯1
放入其自己的执行包中:
⎕SIGNAL