type A =
{
...
id: int;
...
}
我希望我能做到这一点
let Add (x:A) (y:A) =
match x,y with
| {x.id=0,y.id=1} -> ...
如果我不关心x
and的顺序y
(因此函数是对称的),是否有任何技巧来定义函数,我也不介意参数是 atuple (x,y)
还是更高阶函数x,y
type A =
{
...
id: int;
...
}
我希望我能做到这一点
let Add (x:A) (y:A) =
match x,y with
| {x.id=0,y.id=1} -> ...
如果我不关心x
and的顺序y
(因此函数是对称的),是否有任何技巧来定义函数,我也不介意参数是 atuple (x,y)
还是更高阶函数x,y
另一个语法是:
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上的记录模式部分
let add (x: A) (y: A) =
match x.id, y.id with
| 0, 1 | 1, 0 -> (* do some thing *)
| _ -> (* do some thing else *)
如果您只关心一个字段,请直接对其进行模式匹配。您可以使用Or 模式来获得对称功能。