如何在 kotlin 中正确重载运算符

隐藏者

我在 kotlin 中有一个 Vec2 类。
*像这样重载了运算符

operator fun times(v:Float): Vec2 {
    return Vec2(this.x * v, this.y * v)
}

结束行为正如我预期的那样,我可以使用**=缩放向量

var a = Vec2() * 7f; a *= 2f

但是,根据我的理解,我在这里所做的是我创建一个新对象,通过调用Vec2(),每次使用*
即使我使用*=并且我不需要返回任何东西,因为我可以编辑对象本身(使用this关键字)

有没有办法重载*=运算符,使其具有与此函数相似的行为?

fun mul(v:Float) {
    this.x *= v; this.y *= v
}

我需要我的应用程序运行流畅,而且这些操作符使用的非常多,我不希望垃圾收集器的工作造成任何滞后。

瓦蒂梅娜

无需创建新对象,您只需将 x 和 y 更改为var's ,以便它们可以重新分配。

这样做很可能会让你得到这样的结果:

class Vec2(var x: Float, var y: Float) {
    operator fun times(v: Float) {
        x *= v
        y *= v
    }
}

然后在您的实现中它很简单:

val a = Vec2(1.0f, 1.0f)
    
a * 2f
// After this line both x and y are 2.0f

如果您真的想重载*=运算符,请添加timesAssign运算符函数以获取更多信息,请参阅 kotlin 文档

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Golang中正确使用OR运算符

如何在Matlab中正确重载size()方法/运算符

在Boost.Log中正确重载运算符<<

如何在其他名称空间中指定重载运算符?

如何在Kotlin中获取Python的slice运算符

如何在结构内部重载运算符<<

Python:如何使用ast重载运算符

在将对象声明为volatile时如何在C ++中重载运算符

Kotlin中的运算符重载以及此代码如何工作?

C ++如何在不同返回类型的重载运算符上使用std :: function

C ++:如何正确重载<运算符?

如何在非类包中重载运算符?

如何正确重载运算符以执行从__generic_buffer <void *>到__generic_buffer <const void *>的隐式类型转换?

如何在C ++中继承重载运算符的功能

如何在mysql中正确使用exists运算符?

重载的ostream运算符将如何解释此重载运算符的表达式?

如何在运行时更改Moose类上的重载运算符?

如何在重载运算符中使用函数指针

如何在C ++ / CLI中正确执行运算符重载?

如何重载运算符<用于对象的排序方法?

如何在Kotlin中定义新的运算符?

如何在Swift中正确使用conditionak运算符

如何在 C++ 中正确重载运算符 cast char*?

如何编写全局非成员后递减重载运算符?

如何在 cpp 中重载运算符 +=?

如何重载运算符 >> 以输入类的向量值?

如何在 MongoDB 中正确使用 $group 运算符?

如何在 Python 中正确使用“not()”运算符

如何在内置类型上重载运算符