NuGetFsharpx.Extras包公开了用于正则表达式匹配的活动模式,限定为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 -> ...
...
Run Code Online (Sandbox Code Playgroud)
我希望可以改为(使用修改后的Match'活动模式):
let someFunc =
| Match' "...pattern 1..." matches -> ...
| Match' "...pattern 2..." matches -> ...
| Match' "...pattern 3..." matches -> ...
...
Run Code Online (Sandbox Code Playgroud)
Match'我想出的一种可能的定义是:
let (|Match'|_|) pattern =
function
| Match RegexOptions.None pattern matches -> Some matches
| _ -> None
Run Code Online (Sandbox Code Playgroud)
...效果很好。然而,我忍不住想知道是否还有另一种类似于部分应用函数的方法,例如:
let (|Match'|_|) =
Match RegexOptions.None
Run Code Online (Sandbox Code Playgroud)
令人沮丧的是,这是抱怨Type has no accessible object constructors.。
类似于后一种(虽然失败)的方法是否可能?
打开 Regex 模块,然后将最后一个示例更改为
let (|Match|_|) = (|Match|_|) RegexOptions.None
Run Code Online (Sandbox Code Playgroud)
事实上,如果您查看源代码,您会在 Compiled 模块中看到这样的示例。
https://github.com/fsprojects/FSharpx.Extras/blob/master/src/FSharpx.Extras/Regex.fs
| 归档时间: |
|
| 查看次数: |
138 次 |
| 最近记录: |