c语言中void op,F#op_Equality不同类型

标准=运算符假定两个参数都具有相同的类型,所以我认为没有办法添加适用于不同类型的重载。我认为明智的选择可能是定义一个对运营商.=和=.(类似于运营商如.*和*.通常用于标量乘法与左,右标,分别):

type Foo(n:int) =

member x.N = n

static member (=.) (x:Foo, y:int) = x.N = y

static member (.=) (y:Foo, x:int) = x.N = y

但也许当他们想要比较两个不同类型的值时,明确地要求用户明确地写a.N = y(因为严格来说,相同类型的两个值永远不会相等 - 它们甚至不是相同类型!)

如果您确实想要,您可以重新定义=运算符,但我不会建议(并且,当您使用let定义运算符(=)时,编译器会给出警告,说明通常不建议这样做)。无论如何,它可以用a trick described e.g. here来完成:

type Foo(n:int) =

member x.N = n

// A type that contains all overloads of the `=`

// operator that you want to support

type Equality = EQ with

static member (?

static member (?

static member (?

// This hides the standard equality operator and can

// lead to all sorts of confusion! (Probably do not do this :-))

let inline (=) x y = (?

10 = 4

Foo(10) = 3

也许你可以使用答案的后半部分中描述的方法定义你自己的操作,但不要隐藏=,而是不同的调用它。然后你可以处理重载(以及标准类型),但你不会隐藏标准定义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值