23

F# オプションの値を取得する方法、または None の場合は既定値を使用する方法を探しています。これは非常に一般的であるように思えますが、定義済みのものが存在しないとは信じられません。これが私が今それを行う方法です:

// val getOptionValue : Lazy<'a> -> Option<'a> -> 'a    
let getOptionValue (defaultValue : Lazy<_>) = function Some value -> value | None -> defaultValue.Force ()

私は(一種の)C#に相当するF#を探しています?? オペレーター:

string test = GetString() ?? "This will be used if the result of GetString() is null.";

Option モジュールには、かなり基本的なタスクと思われることを行う関数はありません。私は何が欠けていますか?

4

2 に答える 2

36

defaultArg [MSDN] ( )を探しています'T option -> 'T -> 'T

オプションの引数のデフォルト値を提供するためによく使用されます。

type T(?arg) =
  member val Arg = defaultArg arg 0

let t1 = T(1) 
let t2 = T() //t2.Arg is 0
于 2012-09-28T15:08:49.687 に答える
15

同じことを行う独自のオペレーターを簡単に作成できます。

let (|?) = defaultArg

C# の例は次のようになります。

let getString() = (None:string option) 
let test = getString() |? "This will be used if the result of getString() is None.";;

val getString : unit -> string option 
val test : string = "This will be used if the result of getString() is None."

もう少し詳しく書いたブログ記事です。

編集: Nikon the Third はオペレーターにとってはるかに優れた実装を持っていたので、更新しました。

于 2013-08-29T05:52:24.740 に答える