我有以下类型
type NumberedCollection(list) =
let list = list
new () = NumberedCollection(ResizeArray<string>())
它作为甜食的软糖很好用
但是当我添加另一个带seq<string>
type NumberedCollection(list) =
let list = list
new () = NumberedCollection(ResizeArray<string>())
new (col :seq<string>) = NumberedCollection(col.ToList())
我收到以下编译错误
无法根据此程序点之前的类型信息确定方法'NumberedCollection'的唯一重载。可能需要类型注释。候选人是:新:col:seq - &gt; NumberedCollection,new:list:`a - &gt; NumberedCollection
但是当我在主构造函数中将类型信息指定为List时,它可以工作。
我的问题是,在两个版本的辅助构造函数中,调用主要文件时提供的类型是List。为什么会出现推理问题?我没有看到任何歧义。
答案 0 :(得分:3)
问题在于,对于第一个辅助构造函数,编译器不知道您是否要使用第二个辅助构造函数或主构造函数。编译器推迟确定主构造函数中list
的类型,直到它知道哪些地方正在调用它,并且由于ResizeArray<string>
可能是seq<string>
,因此要求哪个构造函数调用它是不明确的。第一个二级构造函数。请注意,在错误消息中,未定义主构造函数的参数类型`a -> NumberedCollection
。