gpt4 book ai didi

error-handling - APL 中的错误处理

转载 作者:行者123 更新时间:2023-12-01 01:46:10 26 4
gpt4 key购买 nike

我目前正在为一个类开发 APL 程序,并且遇到了错误处理问题。

在我制作的函数中,我想检查输入是否为整数。如果不是,我想返回一条错误消息并且不运行该函数的其余部分。到目前为止,我比较看看它是否等于它自己的地板。如果没有,我不希望该功能运行并希望它停止。如果我输入 4.2 就可以了并给出一条错误消息,但如果我输入类似 'A' 的内容则不起作用在或 'ABCDEF'只是给出一个正常的错误。我试着做一个 try catch 语句,但是当它到达 :Try 时它给了我一个错误。在我的功能中。

这不是我想要的。如果输入是字符或字符串,我怎样才能使函数以错误消息结束而不是继续?我知道我可以将整个代码放在一个 if block 中,但这似乎真的没有必要。

我的纯文本代码:

 TESTER Q;error
:If Q≢⌊Q
'Possible'
:Else
'Not Possible'
:EndIf
'Again, Possible'

作为截图:

Screenshot

最佳答案

如果您想提前明确退出以避免将整个代码包含在 :If 中 block ,您可以执行以下操作:

 r←TESTER Q
:If 0≢⊃0⍴⊂Q ⍝ Q not a simple scalar number
:OrIf Q≢⌊Q ⍝ Q not an integer
r←'Not Possible'
→0
:EndIf
r←'Possible'

这通过使用 APL 的原型(prototype)来工作:
⊂Q确保处理 Q作为一个整体。 0⍴制作该“类型”的空列表。 强制一个原型(prototype)元素出来,就像 Q但是所有字符都转换为空格,所有数字都转换为零。现在如果 Q是一个简单的标量数,原型(prototype)是 0 ,所以我们对此进行测试。

Try it online!

但是,您的函数通过抛出一个真正的错误而不是返回或打印结果(这隐含需要被理解为错误)来拒绝无效参数会更合适,以便调用您的函数可以捕获错误并采取适当的行动。如下:
 r←TESTER Q
:If 0≢⊃0⍴⊂Q ⍝ Q not a simple scalar number
:OrIf Q≢⌊Q ⍝ Q not an integer
'Not Possible'⎕SIGNAL 11
:EndIf
r←'Possible'

Try it online!
⎕SIGNAL可选地抛出错误(左参数)和自定义消息,右参数是来自 this list 的错误号.错误编号 11 是 DOMAIN ERROR,在这种情况下是合适的错误。

我了解到您尝试使用 :Try但有一个错误。由于您的标签和屏幕截图,我可以看出您正在使用 Dyalog APL,其语法为:
 :Trap 4 5 6 10 11 16
code to try goes here
:CaseList 4 5
handling of rank and length errors go here
:Case 6
handling of value errors goes here
:Else
all other trapped errors are handled here
:EndTrap
untrapped errors will throw as usual

同样,使用的错误编号是上述链接列表中的错误编号。 ( :Try 是 APLX 中使用的另一种错误捕获系统。)

关于error-handling - APL 中的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49160789/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com