IT序号网

generics之无法定义运算符

fff_TT 2024年10月25日 编程语言 72 0

我有以下简单类型:

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) 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!