gpt4 book ai didi

exception-handling - Red 语言中的 Try/catch 异常

转载 作者:行者123 更新时间:2023-12-04 07:57:55 26 4
gpt4 key购买 nike

我有一个带有文本字段和按钮的小型 GUI 应用程序。该按钮触发一个函数,该函数试图从文本字段中读取一个数字。如果文本字段为空或具有非数字文本,则会引发异常。

如果文本字段没有值或文本值不是有效数字,我会 try catch 错误:

calc: does [
try [x: to integer! num_field/text]
catch [ print "Could not get number"]
print "Number read"
]

以下也不起作用:

calc: does [
try [x: to integer! num_field/text]
throw 123
print "Number read"
]
catch 123 [ print "Could not get number"]

我不确定如何在这里使用 try、throw 和 catch。我试图查看 http://static.red-lang.org/red-system-specs.html 的第 10 节但无法真正理解。

如何解决?谢谢你的帮助。

最佳答案

TRY 如果生成一个错误,它仍然会传递一个错误,但是它不会被触发,除非它是最后一个评估的值。

您可以使用以下内容:

calc: does [
case [
error? value: try [
to integer! num_field/text
][
... do error handling ...
probe make map! body-of :value
]

integer? value [
... do successful thing ...
]
]
]

除了TRY,还有ATTEMPT,如果发生错误,它只会返回NONE。与 TRY 不同,您无法分析错误对象。

attempt [to integer! "Foo"]

CATCHTHROW 是 Rebol/Red 中比错误处理程序更多的流控制功能,无论它们跨越多少堆栈级别,它们都会中断:

catch [
repeat x 10 [
probe x
if x = 3 [throw x]
]
]

关于exception-handling - Red 语言中的 Try/catch 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46231206/

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