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