直接调用multicase活动模式

时间:2014-08-01 15:50:47

标签: f# active-pattern

考虑单个案例活动模式:

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;;
let h ( |Even|Odd| n) = n;;  
-------------------^
/home/shing/stdin(76,20): error FS0623: Active pattern case identifiers must begin with an uppercase letter

上述请求的原因是在活动模式上编写测试,而不显式引入匹配。 目前,如果我想测试活动模式| 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. 

提前感谢您的任何帮助!

0 个答案:

没有答案