活动模式的别名?

ca9*_*3d9 1 f# alias

我在模块中有以下定义Helper.

module Helper

let (|InvariantEqualLooooongName|_|) (str : string) arg =
    if String.Compare(str, arg, StringComparison.OrdinalIgnoreCase) = 0 then Some()
    else None
Run Code Online (Sandbox Code Playgroud)

我想在另一个模块中使用它.

let rec MyFunc .... = 
  let alias = Helper.InvariantEqualLooooongName // Error: The value, constructor, namespace or type 'InvariantEqualLooooongName' is not defined

  match a with 
  | alias "xxx" :: tail -> .....
  | alias "yyyy" :: tail -> ....
  | alias "zzzz" :: tail -> ...
  | alias "123" :: tail -> ...
Run Code Online (Sandbox Code Playgroud)

但是,它得到了错误

未定义值,构造函数,命名空间或类型"InvariantEqualLooooongName"

如何定义活动模式的别名?

Pet*_*etr 5

您可以为此活动模式创建别名:

let alias = Helper.(|InvariantEqualLooooongName|_|)
Run Code Online (Sandbox Code Playgroud)

但我相信你不能在match表达中使用它,因为没有特殊符号就无法识别它.为了能够使用别名,您必须像这样定义它:

let (|Alias|_|)  = Helper.(|InvariantEqualLooooongName|_|)
Run Code Online (Sandbox Code Playgroud)