Generics F#通用约束因“原因”而不起作用;“歧义”;
我有一个应用程序,它呈现钢琴乐谱,因此我必须将一些乐谱概念抽象到唱片结构中。为了保存一些输入,我有时会将成员Generics F#通用约束因“原因”而不起作用;“歧义”;,generics,f#,operator-overloading,constraints,Generics,F#,Operator Overloading,Constraints,我有一个应用程序,它呈现钢琴乐谱,因此我必须将一些乐谱概念抽象到唱片结构中。为了保存一些输入,我有时会将成员FromTuple添加到一些记录类型中。 我还介绍了操作员!>,它接受一个元组并返回相应的元组。 不过,我有以下问题: FS0332:无法解决在此程序点或其附近使用运算符“FromTuple”时固有的歧义。考虑使用类型注释来解决歧义。< /P> 我找不到错误的实际来源(我最初认为一些记录字段名可能在多个记录类型中定义/使用,但情况似乎并非如此) 类型定义: type xyz =
FromTuple
添加到一些记录类型中。
我还介绍了操作员
!>代码>,它接受一个元组并返回相应的元组。
不过,我有以下问题:
FS0332:无法解决在此程序点或其附近使用运算符“FromTuple”时固有的歧义。考虑使用类型注释来解决歧义。< /P>
我找不到错误的实际来源(我最初认为一些记录字段名可能在多个记录类型中定义/使用,但情况似乎并非如此)
类型定义:
type xyz =
{
// some record fields
Field1 : int
Field2 : bool
Field3 : string * string
}
with
static member FromTuple (a, b, c) = { Field1 = a; Field2 = b; Field3 = c }
// more types defined like `xyz`
[<AutoOpen>]
module Globals =
let inline (!>) x = (^b : (static member FromTuple : ^a -> ^b) x)
您的xyz.FromTuple
方法采用三个单独的参数:a:int
、b:bool
和c:string*string
;相反,您需要它获取一个int*bool*(string*string)
。通过将参数包装在另一组括号中来执行此操作:
static member FromTuple ((a, b, c)) = { Field1 = a; Field2 = b; Field3 = c }
static member FromTuple ((a, b, c)) = { Field1 = a; Field2 = b; Field3 = c }