1

単一のケースのアクティブなパターンを考えてみましょう:

let (|ToUpper|) (input : string) = input.ToUpper();;

明示的な一致の外で、上記の単一ケースのアクティブ パターンを呼び出すことができます。

let g ( ToUpper  x ) =x ;;
> val g : string -> string

g ("hello");;              
> val it : string = "HELLO"

次のマルチケースのアクティブなパターンがある場合:

let (|Even|Odd|) n =  if (n % 2 = 0) then Even else Odd ;;

上記のマルチケースのアクティブ パターンを直接呼び出すにはどうすればよいですか? 明らかな方法は機能しません:

let h ( |Even|Odd| n) = n;;
h (|偶数|奇数| n) = n;;  
-------------------^
/home/shing/stdin(76,20): エラー FS0623: アクティブなパターンのケース識別子は大文字で始める必要があります

上記の要求の理由は、明示的に一致を導入せずに、アクティブなパターンでテストを作成することです。現在、アクティブ パターン |Even|Odd| をテストするには、次の isEven 関数を導入する必要があります。

let isEven n =
    match n with
    | Even -> true
    | Odd -> false


[<Test>]
let evenTest1()  =
    (isEven 6) |> should equal true

私ができればいいのですが:

[<Test>]
let evenTest1()  =
    (|Even|Odd| 6 ) |> should equal Even   // Does not work. 

ご協力いただきありがとうございます。

シング

4

0 に答える 0