gpt4 book ai didi

kotlin - Kotlin 中是否有任何方法可以将自定义函数添加到接口(interface)内的属性中?

转载 作者:行者123 更新时间:2023-12-02 13:10:45 24 4
gpt4 key购买 nike

最终我想做的是有一个类,里面有一个可以调用函数的字段。我已经尝试过扩展函数,但这只扩展了该字段定义为的类定义。我试图在一个界面中做到这一点,但最终得到了一个标准的函数调用。
所以,

private interface Geometric{


var position: Float3
get() { return position }
set(value) {
this.dirty = true
this.position = value
}

fun TransformationMatrix() =
floatArrayOf(1f, 0f, 0f, 0f,
0f, 1f, 0f, 0f,
0f, 0f, 1f, 0f,
this.position.x, this.position.y, this.position.z, 1f)
这让我可以做
  val translationMatrix = myobject.TransformationMatrix()
但我真正想做的是
  val translationMatrix = myobject.position.toTransformationMatrix()
我知道我可以编写一个继承自 float3 的名为 position 的类,但我的对象类实际上是唯一会使用它的类
data class Object(val objectName: String, val meshName : String,
override var position : Float3 = Float3(0f,0f,0f),
override var rotation: Quaternion = Quaternion(0f,0f,0f, 1f),
override var scale: Float3 = Float3(1f,1f,1f)
) : Geometric, OpenGLObject, GameObject/*Color*/
正如你所看到的,我为 Quaternion 编写了一个特殊的类,因为它有一个辅助构造函数,它采用欧拉角,否则我也希望它只是一个带有旋转函数的 Float4,它将 float4 支持字段作为旋转矩阵返回。
基本上,这里的想法是保持数据类尽可能轻,然后只询问它以我需要的甲酸盐形式保存的数据。 position.toMatrix4(),rotation.toMatrix(),分机。
有没有办法可以使用对象或其他一些很酷的 Kotlin 东西来实现这一点?

最佳答案

我认为你很幸运。 kotlin 中有一个新的实验性 Future,名为 inline class我认为这正是您所需要的。inline class用作类型的包装器!

inline class Position(val pos: Float3 ) {

fun transformationMatrix() = ...
}
你可以像这样使用它
val pos = Position(f3)
pos.transformationMatrix()
而且您不必担心不重用它或任何开销,因为在运行时变量 pos仅转换为 f3它的类型是 Float3并且不会有类的迹象。
并且请不要以大写字母开头您的函数名称!

关于kotlin - Kotlin 中是否有任何方法可以将自定义函数添加到接口(interface)内的属性中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63164107/

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