【发布时间】:2014-11-25 13:40:52
【问题描述】:
我有一个简单的包装器,用于将附加数据添加到任意对象:
type Wrapper<'T>(data:'T) =
member val Data:'T=data with get
member val AdditionalProperty:int=0 with get
然后我在一个单链表中使用这些元素,我想将其中的项目限制为Wrapper<'T>,定义了元素:
type LListItem<'T>(data:Wrapper<'T>) =
member val Data:Wrapper<'T>=data with get
member val Prev:LListItem<'T> option = None with get, set
然后我假装用这个类来管理链表:
1| type LList<'T>()=
2| let mutable last:LListItem<Wrapper1<'T>> option = None
3| member x.Append(wrapped:Wrapper1<'T>)=
4| let item = new LListItem<'T>(wrapped)
5| match last with
6| | None ->
7| last <- Some item
8| | Some l ->
9| item.Prev <- last
10| last <- Some item
但是在这个Append 方法中,我出现了这些编译错误:
第 1 行:此类型参数的使用方式将其限制为始终为 'Wrapper'
第 1 行:此代码的通用性低于其注释所需的通用性,因为无法概括显式类型变量“T”。它被限制为 'Wrapper'。
第 3 行:通用成员“Append”已在此程序点之前的非统一实例化中使用。考虑对成员重新排序,以便首先出现该成员。或者,显式指定成员的完整类型,包括参数类型、返回类型和任何其他泛型参数和约束。
我在这里做一些根本错误的事情,但我不理解编译器消息。
【问题讨论】:
标签: generics f# linked-list singly-linked-list