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

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

I wish i could do this

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

如果我不关心xy的顺序(使函数对称)是否有什么技巧来定义该函数?并且无论参数是tuple (x,y)还是更高阶的函数x,y,我都不在乎。

2个回答

12

1
这应该是正确的答案,因为它匹配记录而不是整数。 - gradbot
@gradbot:我不太想使用这个,因为根据OP的问题,我们还不知道更多的领域。 - pad
4
引用手册的话:“记录模式用于分解记录以提取字段的值。该模式不必引用记录的所有字段;任何省略的字段仅不参与匹配,也不被提取。” - t0yv0
@gradbot,匹配记录和整数有什么区别?为什么这个答案比Pad的更好? - colinfang
@colinfang 如果你在匹配记录,则不必考虑字段顺序。你也不必输入所有字段。例如,你可以针对现有记录进行匹配。此外,在toyvo的评论中,他提到如果你在匹配元组,则必须匹配所有字段,而不是只匹配部分字段。 - gradbot
显示剩余2条评论

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模式来拥有对称函数。查看更多

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接