如何在2条记录的字段上进行模式匹配?

col*_*ang 3 f# pattern-matching

type A =
  {
    ...
    id: int;
    ...
  }
Run Code Online (Sandbox Code Playgroud)

我希望我能做到这一点

let Add (x:A) (y:A) =
     match x,y with
      | {x.id=0,y.id=1} -> ...
Run Code Online (Sandbox Code Playgroud)

如果我不关心顺序xy(以便函数是对称的),有没有任何技巧来定义函数我也不介意参数是tuple (x,y)一个更高阶函数还是更高阶函数x,y

t0y*_*yv0 12

另一种语法是:

let add x y =
    match x, y with
    | {id = 0}, {id = 1} | {id = 1}, {id = 0} -> ..
    | _ -> ..
Run Code Online (Sandbox Code Playgroud)

请参阅http://msdn.microsoft.com/en-us/library/dd547125.aspx上的"记录模式"部分.

  • @pad,引用手册:"记录模式用于分解记录以提取字段的值.模式不必引用记录的所有字段;任何省略的字段都不参与匹配,也不提取. " (4认同)