我正在尝试为 F# 元组创建类型扩充方法。这段代码编译得很好:
type System.Tuple<'a, 'b> with
member this.ToParameter name =
match this with
| this -> sprintf "%s=%O,%O" name (this.Item1, this.Item2)
但是,当我尝试调用此方法时:
printfn "%s" (("cat", 2).ToParameter("test"))
我收到一条错误消息,提示“未定义此字段、构造函数或成员 'ToParameter'。” 在解释器中,以下表达式将它们的类型报告为某种形式的 System.Tuple'2:
typedefof<'a * 'b>.FullName
(1, 2).GetType().FullName
在 Visual Studio 中,如果我将鼠标悬停在表达式上:
let a = 1, 2
它报告一种 int * int 类型。当我尝试扩充这种类型,或者它是通用的等价物时,'a * 'b,我得到一个错误。
是否可以为 F# 元组创建通用扩充?