添加另一个辅助构造函数时编译错误

时间:2014-07-22 14:23:36

标签: f#

我有以下类型

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。为什么会出现推理问题?我没有看到任何歧义。

1 个答案:

答案 0 :(得分:3)

问题在于,对于第一个辅助构造函数,编译器不知道您是否要使用第二个辅助构造函数或主构造函数。编译器推迟确定主构造函数中list的类型,直到它知道哪些地方正在调用它,并且由于ResizeArray<string>可能是seq<string>,因此要求哪个构造函数调用它是不明确的。第一个二级构造函数。请注意,在错误消息中,未定义主构造函数的参数类型`a -> NumberedCollection