gpt4 book ai didi

exception - F#:自定义异常。有没有更好的方法来重载异常类型?

转载 作者:行者123 更新时间:2023-12-04 13:15:23 26 4
gpt4 key购买 nike

我有一个定义如下的简单自定义异常,但我不喜欢使用Throw函数,而真的我不喜欢同时使用Throw和Throw2函数。有没有更优雅的方式做到这一点?有没有中间函数直接抛出MyError或Error的方法吗?

#light

module Utilities.MyException

type MyError(code : int, msg : string) =
member e.Msg = msg
member e.Code = code
new (msg : string) = MyError(0, msg)

exception Error of MyError

let public Throw (msg : string) =
let err = new MyError(msg)
raise (Error err)

let public Throw2 (code : int) (msg : string) =
let err = new MyError(code, msg)
raise (Error err)

我正在像下面那样使用它,但我想使用一种不起作用的变体
Throw(System.String.Format("Could not parse boolean value '{0}'", key))

//The string isn't of the correct type for Error
//raise(Error(System.String.Format("Could not parse boolean value '{0}'", key)))

//MyError isn't compatible with System.Exception
//raise(MyError(System.String.Format("Could not parse boolean value '{0}'", key)))

最佳答案

只需忽略exception构造并直接定义异常类(即,一个从System.Exception派生的类),就像在C#中一样:

type MyError(code : int, msg : string) =
inherit Exception(msg)
member e.Code = code
new (msg : string) = MyError(0, msg)

raise(MyError("Foo"))
raise(MyError("Foo", 1))

请注意,我删除了 Msg成员,因为 Exception已经具有等效的 Message属性。

关于exception - F#:自定义异常。有没有更好的方法来重载异常类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1196766/

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