F#:模式组合?

时间:2010-09-10 15:59:34

标签: f# design-patterns

我正在尝试编写一个组成其他两种模式的模式,但我不确定如何去做。我的输入是字符串列表(文档);我有一个模式匹配文档标题和匹配文档正文的模式。此模式应与整个文档匹配,并返回标题和正文模式的结果。

1 个答案:

答案 0 :(得分:25)

您可以使用&一起运行两种模式。你在问题中遗漏了一些细节,所以这里的一些代码与你正在做的有些相似。

let (|Header|_|) (input:string) =
    if input.Length > 0 then
        Some <| Header (input.[0])
    else
        None

let (|Body|_|) (input:string) =
    if input.Length > 0 then
        Some <| Body (input.[1..])
    else
        None

第一个模式将获取字符串的第一个字符,第二个模式将返回除第一个字符之外的所有字符。以下代码演示了如何一起使用它们。

match "Hello!" with
| Header h & Body b -> printfn "FOUND: %A and %A" h b
| _ -> ()

打印出来:FOUND: 'H' and "ello!"