2016-09-29 5 views
5

Есть ли способ инкапсулировать шаблон в F #?Есть ли способ инкапсулировать шаблон в F #?

Например, вместо того, чтобы писать это ...

let stringToMatch = "example1" 

match stringToMatch with 
| "example1" | "example2" | "example3" -> ... 
| "example4" | "example5" | "example6" -> ... 
| _ -> ... 

Есть ли какой-нибудь способ, чтобы сделать что-то вдоль этих линий ...

let match1to3 = | "example1" | "example2" | "example3" 
let match4to6 = | "example4" | "example5" | "example6" 

match stringToMatch with 
| match1to3 -> ... 
| match4to6 -> ... 
| _ -> ... 

ответ

6

Вы можете сделать это с активными шаблонами:

let (|Match1to3|_|) text = 
    match text with 
    | "example1" | "example2" | "example3" -> Some text 
    | _ -> None 

let (|Match4to6|_|) text = 
    match text with 
    | "example4" | "example5" | "example6" -> Some text 
    | _ -> None 

match stringToMatch with 
| Match1to3 text -> .... 
| Match4to6 text -> .... 
| _ -> ... 
+2

Отлично! Вы не только ответили на мой вопрос, но Active Patterns просто нажали на меня. Благодаря! – lambdakris

+3

маленькая nitpicking, чтобы ближе соответствовать исходному коду ** Возврат ** Частичный ** Активные шаблоны должен быть 'Some()', и совпадение должно быть просто 'MatchXtoY -> ...' – Sehnsucht

+2

Кроме того, могли бы сделать сокеты немного более кратким, используя 'function' вместо' match text with'. –

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