generics - 无法定义运算符

标签 generics f#

我有以下简单类型:

module Structures
    type Point2D<'T> (x : 'T, y : 'T) =
        member this.X = x
        member this.Y = y
        member this.IsEqualTo (p : Point2D<'T>) =
            (this.X = p.X) && (this.Y = p.Y)

但 Visual Studio(2012 试用版)在名称“IsEqualTo”下放置了一条红色波浪线,在“this.X”下放置了一条蓝色波浪线。

红色波浪线的错误信息如下:

The generic member IsEqualTo has been used at a non-uniform instantiation prior to this program point. Consider reordering the members so this member occurs first. Alternatively, specify the full type of the members explicitly, including argument types, return types and any additional generic parameters and constraints.

蓝线的信息是:

A type parameter is missing a constraint 'when 'T : equality'

我试过将“IsEqualTo”放在所有其他成员之前,但错误仍然存​​在。

我猜这个错误与 this.X = p.X 中的 = 标志正在处理通用类型 的事实有关T 但我似乎无法更正它。

预先感谢您的帮助。

最佳答案

type Point2D<'T when 'T : equality> (x : 'T, y : 'T) =
    member this.X = x
    member this.Y = y
    member this.IsEqualTo (p : Point2D<'T>) =
        (this.X = p.X) && (this.Y = p.Y)

关于generics - 无法定义运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11069551/

相关文章:

generics - 为什么类型参数在 TypeScript 中消失了?

generics - 创建辅助非泛型构造函数时 F# 中的编译器错误

f# - 在F#中记录方法

f# - map 上的 map <'a, int>

c# - 从没有丑陋的 "Module"后缀的 C# 调用 F# 函数

Java 支持泛型类型和方法。为什么不是通用字段?

c# - 从基类的静态方法获取派生类类型

c# - 如何在 C# 中捕获通用异常的所有变体

c# - 通用容器内是什么类型

f# - 是否有用于分隔选项序列的标准 F# 函数?