2017-01-25 4 views
4

私は、http投稿テンプレートに基づいて蒼白関数を持っています。私はすべての3つの間で、ヌルをチェックするための最良の方法は何3.F#を使用した複数のフィールド検証(紺色関数内)

let versionJ = json.["version"] 
let customerIdJ = json.["customerId"] 
let stationIdJ = json.["stationId"] 
match isNull versionJ with 

に1本の支柱からJSONを拡大しましたか?チュールを使用しますか?この場合

match isNull versionJ, isNull customerIdJ, isNull stationIdJ with 

答えて

2

:その後、ちょうど行う

let inline isNull value = (value = null) 

あなたは正確に何を確認したいのですか?あなたは、少なくとも1つのヌルがあることを確認したい場合は、次の操作を行うことができます :

let allAreNotNull = [versionJ; customerIdJ; stationIdJ] 
        |> List.map (not << isNull) 
        |> List.fold (&&) true 

あなたがそれらのすべては、あなたが次の操作を行うことができヌルであることを確認したい場合は、次の

let allAreNull = [versionJ; customerIdJ; stationIdJ] 
       |> List.map isNull 
       |> List.fold (&&) true 

更新

またList.forallでそれを置き換えることができます。

[versionJ; customerIdJ; stationIdJ] 
|> List.forall (not << isNull) 


[versionJ; customerIdJ; stationIdJ] 
|> List.forall isNull 
+0

リストを使用する場合(これは、単純なifよりも多くのリソースを使用します)。より単純なソリューションがあります: – mjpolak

2

、私はあなたのようにisNullを定義している場合ならば、簡単な使用してクリーナー液、 ことだと思う。それが依存

if isNull versionJ && isNull customerIdJ && isNull stationIdJ then 
    // your code 
2

もう1つのアプローチは、すべての要素が(<>) nullの場合はcreateRecordを適用する申請者からインスピレーションを受けています。

let createRecord v c s = v, c, s 

let inline ap v f = 
    match f, v with 
    | _  , null 
    | None , _  -> None 
    | Some f, v  -> f v |> Some 

let v = 
    Some createRecord 
    |> ap json.["version"] 
    |> ap json.["customerId"] 
    |> ap json.["stationId"] 
関連する問題