簡體   English   中英

如何在F#中編寫這個C#代碼

[英]How to write this C# code in F#

我習慣在C#中編寫這樣的代碼:

SomeObj obj;
try{
    // this may throw SomeException
    obj = GetSomeObj();
}catch(SomeException){
    // Log error...
    obj = GetSomeDefaultValue();
}

obj.DoSomething();

這是我在F#中翻譯它的方式(obj是一個列表):

let mutable obj = []
try
    obj <- getSomeObj
with
    | ex ->
        // Log ex
        obj <- getSomeDefaultValue

doSomething obj

有沒有辦法在不使用可變變量的情況下在F#中執行此操作? 是否有一種更“優雅”的方式來處理F#中的這種情況?

謝謝!

F#-ish方式是在兩個分支中返回相同類型的表達式:

let obj =
    try
        getSomeObj()
    with
    | ex ->
        // Log ex
        getSomeDefaultValue()

doSomething obj

在F#中,您可以使用option類型處理異常。 當沒有明顯的默認值時,這是一個優勢,編譯器會強制您處理異常情況。

let objOpt =
    try
        Some(getSomeObj())
    with
    | ex ->
        // Log ex
        None

match objOpt with
| Some obj -> doSomething obj
| None -> (* Do something else *)

在函數中包含這個邏輯......

let attempt f = try Some(f()) with _ -> None
let orElse f = function None -> f() | Some x -> x

...它可能是:

attempt getSomeObj |> orElse getSomeDefaultValue

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM