gpt4 book ai didi

exception - 如何引发打印消息并返回值的异常?

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

我们的教授要求我们在作业中这样做:

If the threshold given is negative, you should print the message “Error: Negative Threshold” and return an empty list. To do this, define an exception called ThresholdOutOfRange, raise it if the threshold is negative, and handle the exception to achieve the proper behavior.

我不明白如何引发异常、返回值和打印错误消息。现在我引发异常的代码是(除了异常之外的重要部分):

fun getnearbylist(center, threshold, ziplist) =
let
exception ThresholdOutOfRange;
fun test_threshold(threshold, zip, nil) =nil
| test_threshold(threshold, zip, ziplist as x::xs) =
if (threshold <0.0) then raise ThresholdOutOfRange
(* [...skipped a long unrelated middle bit. most important is just knowing
this function returns a string list...] *)
else x::test_threshold(threshold, zip, xs)
in
test_threshold(threshold, center, ziplist)
handle
ThresholdOutOfRange => []
end

因此,当出现异常时,我的代码将只返回一个空列表。据我所知,鉴于异常必须与引发它们的函数具有相同的返回类型,我该怎么做才能返回空列表并打印错误消息?

最佳答案

异常处理的结果类型必须与您处理异常的表达式相同是正确的。换句话说,exp_1exp_2 必须在下面的代码中具有相同的类型,就像 if 表达式的“then”和“else”部分。

exp_1 handle pat => exp_2

因此,您要寻找的是一种在 exp_2 部分执行多项操作的方法,特别是具有打印消息副作用的方法。对于这样的事情,你可以使用序列。序列具有以下形式(注意括号)

(exp_1; ... ; exp_n) 

它本身就是一个表达式。如下所示

- (print "foo\n"; print "bar\n"; 42);
foo
bar
val it = 42 : int

由此我们可以看出,序列的最终结果是 exp_n 的计算结果。

由于 let 表达式中经常使用序列,所以可以这样写(没有前面提到的括号)

let dec in exp_1 ; ... ; exp_n end

奖金信息

序列实际上是一系列情况的派生形式(语法糖)。以下

(expr_1 ; ... ; exp_n ; exp)

相当于

case expr_1 of _ => 
case ... =>
case exp_n of _ => exp

关于exception - 如何引发打印消息并返回值的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15886817/

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