Следующая часть кода работает, но для меня это кажется неправильным ... Или, может быть, это просто мое плохое понимание F # ... То, что меня насторожило, - это упорядочение матча в функции проверки соответствия ,Образец сопоставления заказа
open System
type Adapter =
{ IP : string
MAC : string
FriendlyName : string
ID : int }
let (|IsMatchByName|_|) (input : Adapter) (name: string) =
match input with
| {FriendlyName = friendlyName} when friendlyName = name -> Some()
| _ -> None
let checkmatch (record: Adapter) (name : string) =
match name with
| IsMatchByName record -> "Match"
| _ -> "No match"
[<EntryPoint>]
let main argv =
let testRecord = {IP ="127.0.0.1"; MAC ="FF:FF:FF:FF:FF:FF"; FriendlyName = "Home";ID = 229229}
let result = checkmatch testRecord "Home"
Console.WriteLine(result)
Console.ReadKey() |> ignore
0 // return an integer exit code
Ниже приведено то, что я ожидаю от функции проверки соответствия. Где я сопоставляю запись и передаю имя в качестве дополнительного параметра. Первый вход IsMatchByName является адаптером, так почему он ожидает ввода в другом порядке?
let checkmatch (record: Adapter) (name : string) =
match record with
| IsMatchByName name -> "Match"
| _ -> "No match"