如何部分应用活动模式
How to partially apply an active pattern
Fsharpx.Extras
NuGet 包公开了一个用于正则表达式匹配的活动模式,限定为 Fsharpx.Text.Regex.Match
。
第一个参数是来自 BCL 的 RegexOptions 值。
而不是必须写:
let someFunc =
| Match RegexOptions.None "...pattern 1..." matches -> ...
| Match RegexOptions.None "...pattern 2..." matches -> ...
| Match RegexOptions.None "...pattern 3..." matches -> ...
...
我 希望 可以改为使用(使用修改后的 Match'
活动模式):
let someFunc =
| Match' "...pattern 1..." matches -> ...
| Match' "...pattern 2..." matches -> ...
| Match' "...pattern 3..." matches -> ...
...
我想到的 Match'
的一个可能定义是:
let (|Match'|_|) pattern =
function
| Match RegexOptions.None pattern matches -> Some matches
| _ -> None
...效果很好。但是,我不禁想知道是否有另一种类似于部分应用函数的方法,例如:
let (|Match'|_|) =
Match RegexOptions.None
令人沮丧的是,这抱怨 Type has no accessible object constructors.
。
是否可以采用类似于后一种方法(alebit 失败)的方法?
打开 Regex 模块,然后将您的最后一个示例更改为
let (|Match|_|) = (|Match|_|) RegexOptions.None
事实上,如果您查看源代码,您会在编译模块中看到这样的示例。
https://github.com/fsprojects/FSharpx.Extras/blob/master/src/FSharpx.Extras/Regex.fs
Fsharpx.Extras
NuGet 包公开了一个用于正则表达式匹配的活动模式,限定为 Fsharpx.Text.Regex.Match
。
第一个参数是来自 BCL 的 RegexOptions 值。
而不是必须写:
let someFunc =
| Match RegexOptions.None "...pattern 1..." matches -> ...
| Match RegexOptions.None "...pattern 2..." matches -> ...
| Match RegexOptions.None "...pattern 3..." matches -> ...
...
我 希望 可以改为使用(使用修改后的 Match'
活动模式):
let someFunc =
| Match' "...pattern 1..." matches -> ...
| Match' "...pattern 2..." matches -> ...
| Match' "...pattern 3..." matches -> ...
...
我想到的 Match'
的一个可能定义是:
let (|Match'|_|) pattern =
function
| Match RegexOptions.None pattern matches -> Some matches
| _ -> None
...效果很好。但是,我不禁想知道是否有另一种类似于部分应用函数的方法,例如:
let (|Match'|_|) =
Match RegexOptions.None
令人沮丧的是,这抱怨 Type has no accessible object constructors.
。
是否可以采用类似于后一种方法(alebit 失败)的方法?
打开 Regex 模块,然后将您的最后一个示例更改为
let (|Match|_|) = (|Match|_|) RegexOptions.None
事实上,如果您查看源代码,您会在编译模块中看到这样的示例。
https://github.com/fsprojects/FSharpx.Extras/blob/master/src/FSharpx.Extras/Regex.fs