考虑单个案例活动模式:
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.
提前感谢您的任何帮助!
盛