Функция связывания приводит к выражению «когда» - F # - PullRequest
1 голос
/ 10 июля 2019

Я пишу совпадение, где я ограничиваю базу сопоставления для функции f, используя выражение «когда». Я хотел бы связать результат f для использования в следующем выражении. Я хотел бы, чтобы мой код выглядел примерно так:

match input with
| input when f x input -> //Some exp where (f x input) is used but not recomputed
| input when f y input -> //Some exp where (f x input) is used but not recomputed

Очевидное решение состоит в том, чтобы просто пересчитать результат, но мне интересно, есть ли альтернативный механизм, который я могу использовать.

1 Ответ

0 голосов
/ 11 июля 2019

Результатом f в следующем выражении является "true".Вы можете просто использовать true, если хотите.Если вы хотите сопоставить и каким-то образом изменить соответствие, вы можете использовать активные шаблоны.

open System.Text.RegularExpressions
let (|FirstRegexGroup|_|) pattern input =
   let m = Regex.Match(input,pattern) 
   if (m.Success) then Some m.Groups.[1].Value else None  

let testRegex str = 
    match str with
    | FirstRegexGroup "http://(.*?)/(.*)" host -> 
           printfn "The value is a url and the host is %s" host
    | FirstRegexGroup ".*?@(.*)" host -> 
           printfn "The value is an email and the host is %s" host
    | _ -> printfn "The value '%s' is something else" str

// test
testRegex "http://google.com/test"
testRegex "alice@hotmail.com"

источник https://fsharpforfunandprofit.com/posts/convenience-active-patterns/

...