我在 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] 删除。
我来说两句