如何使用F#创建一个空的catch块?

时间:2019-04-30 15:56:01

标签: f#

如何在F#中创建一个空的catch块(或忽略所有异常)?

我正在研究创建SQL Server数据库和架构的代码。这是一个示例:

let run (ipAddress : string) (port : int) (userName : string) (password : string) =
    let mutable maxTime = 0
    let mutable succeeded = false
    while not succeeded do
        try
            if maxTime > 120 then
                failwith "Unable to initialize SQL Server database in two minutes."
            Thread.Sleep(TimeSpan.FromSeconds(5.0))
            maxTime <- maxTime + 5
            let con = new ServerConnection
                          (sprintf "%s,%i" ipAddress port, userName, password)
            let server = new Server(con)

            let db = new Database(server, "mydb")
            db.Create()

            let schema = new Schema(db, "myschema")
            schema.Create()

            succeeded <- true
        with
        // what goes here as the equivalent of: catch { }

如果遇到数据库不可用的异常情况,我只想忽略它并继续前进;该数据库位于Docker容器中,因此有时启动起来很慢。

但是在F#中执行此操作的语法是什么?

1 个答案:

答案 0 :(得分:4)

在F#中,try .. with ..是一个表达式,可以对其所包含的一个表达式的结果表示怀疑。在命令式代码中,这些分支的结果为unit类型的值,您可以将其写为()

因此,在您的示例中,with的{​​{1}}分支需要返回一个单位值-您可以使用类似以下内容的代码编写该代码:

try .. with ..