2010-09-10 5 views
10

Я пытаюсь написать шаблон, который состоит из двух других шаблонов, но я не уверен, как это сделать. Мой ввод - это список строк (документ); У меня есть шаблон, который соответствует заголовку документа и шаблону, который соответствует телу документа. Этот шаблон должен соответствовать всему документу и возвращать результаты шаблонов заголовка и тела.F #: Композиция шаблона?

+1

Не уверен, что вы пытаетесь сделать здесь, вы можете разместить свой вход и желаемый результат, и любой код, который вы написали до сих пор? – Juliet

ответ

23

Вы можете использовать два шаблона вместе, используя &. Вы оставили некоторые детали в своем вопросе, поэтому вот какой-то код, который я предполагаю, несколько похож на то, что вы делаете.

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!"

+0

+1 Узнал что-то новое! – Dario

+0

Так много власти по дизайну. удивительно. – nicolas

+0

Из любопытства, почему вы используете '<|'? –

Смежные вопросы