模式匹配排序

时间:2015-11-15 15:26:57

标签: f# pattern-matching

下面这段代码有效,但对我而言似乎是错误的......或许它只是我对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"

1 个答案:

答案 0 :(得分:1)

这是部分申请的直接后果 您部分将record应用于IsMatchByName;获取一个期望由match子句给出的字符串的函数。

当部分活动模式返回某些内容(而不是单位)时,它看起来更糟;有关示例,请参阅here