我遇到了一些我不明白的 Array.map2。
考虑这段代码:
type r1 = {
v1 : int
X : int
}
type r2 = {
v1 : int
Y : int
}
let a1 = [|{v1=1; X=1}; {v1=2; X=2}|] // val a1 : r1 [] ...
let a2 = [|{v1=100; Y=100}; {v1=200; Y=200}|] // val a2 : r2 [] ...
Array.map2 (fun x1 x2 -> (x1.X, x2.Y)) a1 a2 // works as expected
Array.map2 (fun x1 x2 -> (x1.v1, x2.v1)) a1 a2 // error FS0001: Type mismatch. Expecting a r2 [] but given a r1 []
两条记录都有一个字段v1
。在最后一行中,我尝试v1
从不同的记录类型r1
和中获取 的值的元组r2
。当我尝试在不同记录上选择具有相同名称的字段时,似乎会引发错误。
不知何故,它得出了x1
必须是 type的结论r2
,为什么第二行不从两个参数a1
和推断类型a2
?
编辑
这修复了它,但我希望从参数中获得正确的类型。
Array.map2 (fun (x1:r1) x2 -> (x1.v1, x2.v1)) a1 a2 // works