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

时间:2012-09-03 14:00:54

标签: f# pattern-matching

type A =
  {
    ...
    id: int;
    ...
  }

我希望我能做到这一点

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

如果我不关心xy的顺序(这样函数是对称的),是否有任何技巧来定义函数我也不介意参数是否是tuple (x,y)或更高阶函数x,y

2 个答案:

答案 0 :(得分:12)

另一种语法是:

let add x y =
    match x, y with
    | {id = 0}, {id = 1} | {id = 1}, {id = 0} -> ..
    | _ -> ..

请参阅http://msdn.microsoft.com/en-us/library/dd547125.aspx

处的记录模式部分

答案 1 :(得分:4)

let add (x: A) (y: A) =
     match x.id, y.id with
     | 0, 1 | 1, 0 -> (* do some thing *)
     | _ -> (* do some thing else *)

如果您只关心某个字段,请直接在其上进行模式匹配。您可以使用Or pattern来创建对称函数。