下面这段代码有效,但对我而言似乎是错误的......或许它只是我对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"
答案 0 :(得分:1)
这是部分申请的直接后果
您部分将record
应用于IsMatchByName
;获取一个期望由match子句给出的字符串的函数。
当部分活动模式返回某些内容(而不是单位)时,它看起来更糟;有关示例,请参阅here。