gpt4 book ai didi

kotlin - 如果第一个操作数不是您的对象,如何覆盖任何运算符

转载 作者:行者123 更新时间:2023-12-02 13:23:20 25 4
gpt4 key购买 nike

我尝试过Kotlin,因为它应该是一个Java,没有某些限制,例如检查异常或不支持运算符覆盖(当然,这些限制已经存在,例如减少滥用或强制冗长的权利,但是这个问题不是为什么它们应该(不存在)。因此,我编写了一个简单的Vector2类,该类应支持+-* /之类的基本运算符。

当您的第一个操作数和第二个操作数都来自Vector2类型时,就没有问题,但是当第一个操作数不是来自Vector2类型时,就存在一个问题。举个例子:

fun main(args: Array<String>) {
val vector = Vector2(2.0, 3.0) * 2.0
}

由于 Vector2中的此方法,因此可以正常工作:
operator fun times(d: Double) = Vector2(x * d, y * d)

但是,如果两个操作数这样改变位置,我应该怎么做:
fun main(args: Array<String>) {
val vector = 2.0 * Vector2(2.0, 3.0)
}

我虽然是 times()类型的 Double运算符重载:
// In 'Vector2.kt'
operator fun Double.times(vector: Vector2) = ...

但我不知道如何检索double值并将其与 vector 相乘。

有人可以帮忙吗?提前致谢!

最佳答案

定义extension function时,在实现主体中,接收方(调用该函数的对象)始终以this的形式提供。

operator fun Double.times(vector: Vector2): Vector2 = vector * this

您可以按照自己喜欢的任何方式实现,我只是反转了操作数以简化示例。

关于kotlin - 如果第一个操作数不是您的对象,如何覆盖任何运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49966539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com