gpt4 book ai didi

scala - 选项方法签名,功能已在此范围内定义

转载 作者:行者123 更新时间:2023-12-02 06:33:49 25 4
gpt4 key购买 nike

def createFloatBuffer(data: Option[Quaternion]*): Option[FloatBuffer] = data match {
...
}

def createFloatBuffer(data: Option[Vector3f]*): Option[FloatBuffer] = data match {
...
}

由于两个方法具有相同的方法签名,此代码将无法编译。 None 类型将不知道调用哪个方法。

我可以只重命名这些方法,但是我想在我的代码中使用这种重载风格。

最佳答案

类型删除后,这两个方法变成了createFloatBuffer(data: Option),所有类型信息都丢失了,在运行时不可用。

作为解决方法,我建议您使用 TypeClass 模式。

case class Quaternion(v: Int)
case class Vector3f(v: Int)

case class FloatBuffer(v: Int)

sealed trait FloatBufferBuilder[T] {
def createFloatBuffer(data: Option[T]): Option[FloatBuffer]
}

implicit object QuaternionFloatBufferBuilder extends FloatBufferBuilder[Quaternion] {
def createFloatBuffer(data: Option[Quaternion]) = data.map(d => FloatBuffer(d.v))
}

implicit object Vector3fFloatBufferBuilder extends FloatBufferBuilder[Vector3f] {
def createFloatBuffer(data: Option[Vector3f]) = data.map(d => FloatBuffer(d.v))
}

def createFloatBuffer[T : FloatBufferBuilder](data: Option[T]): Option[FloatBuffer] =
implicitly[FloatBufferBuilder[T]].createFloatBuffer(data)


println(createFloatBuffer(Some(Quaternion(1))))
println(createFloatBuffer(Some(Vector3f(1))))

磁铁图案也可能对您感兴趣:http://spray.io/blog/2012-12-13-the-magnet-pattern/

关于scala - 选项方法签名,功能已在此范围内定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25089488/

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