【发布时间】:2010-11-30 08:11:10
【问题描述】:
我有一个名为 Vector 的类,它实现了许多运算符,例如 + 和属性,例如 Count。 Vector 也由继承自 Vector 的 DenseVector、SparseVector 等类进行子类型化。现在在 F# 中,当我编写以下代码时
let foo (v : #Vector) (w : #Vector) = v + w
let bar (v : #Vector) (w : #Vector) = v.Count + w.Count
对于“foo”,我收到警告: “这种构造导致代码比其类型注释所指示的更通用。使用'#','_'或其他类型注释所暗示的类型变量在或附近......已被限制为类型'Vector ’。” 而“bar”工作得很好。
我不明白为什么灵活类型约束适用于属性但对于运算符解析却有问题。任何解释/想法/解决方法?
编辑我的 Vector 类是抽象的,并且有一个具有以下签名的运算符:
public static Vector operator +(Vector leftSide, Vector rightSide)
【问题讨论】:
-
这是一元
+。没有leftSide? -
对不起,我复制粘贴错了运算符
标签: .net inheritance f# static