通用 class 的伴随对象 |斯卡拉
Companion Object for Generic class | Scala
我正在使用 scala 2.13。
我正在尝试为代表 2D 点的通用 class 命名点创建伴生对象。
这是代码:
import scala.math.Numeric
class Point[T: Numeric](val x: T, val y: T) {
import scala.math.Numeric.Implicits._
private def getDistance(otherPoint: Point[T]): Double = {
math.sqrt(math.pow((otherPoint.x - x).toDouble, 2) +
math.pow((otherPoint.y - y).toDouble, 2))
}
override def toString = "(" + x + "," + y + ")"
}
object Point[T: Numeric] {
def isWithinDistance(otherPoint: Point[T], distance: Double): Boolean = {
return getDistance(otherPoint) <= distance
}
}
但是在我定义伴生对象的第 13 行,我给出了类似于 class Point 的类型参数,但我得到以下错误:
';'预期但找到“[”。
click Here to see the location of the error
我们如何为泛型 classes 创建伴生对象,以及我们如何使用伴生对象访问在其他一些驱动程序中的 class 中定义的方法?
你不能参数化一个对象,更重要的是,你不需要:)
对象是单例,它们的目的是捕获整个类型共有的东西,并且独立于具体实例(这就是为什么你的函数还需要 two Point
参数,而不是一个) .
object Point {
def isWithinDistance[T : Numeric](
point: Point[T],
otherPoint: Point[T],
distance: Double
) = point.getDistance(otherPoint) <= distance
}
附带说明一下,我看不出有任何理由将此函数放在伴随对象上。它应该是一个常规的 class 方法。
我正在使用 scala 2.13。 我正在尝试为代表 2D 点的通用 class 命名点创建伴生对象。 这是代码:
import scala.math.Numeric
class Point[T: Numeric](val x: T, val y: T) {
import scala.math.Numeric.Implicits._
private def getDistance(otherPoint: Point[T]): Double = {
math.sqrt(math.pow((otherPoint.x - x).toDouble, 2) +
math.pow((otherPoint.y - y).toDouble, 2))
}
override def toString = "(" + x + "," + y + ")"
}
object Point[T: Numeric] {
def isWithinDistance(otherPoint: Point[T], distance: Double): Boolean = {
return getDistance(otherPoint) <= distance
}
}
但是在我定义伴生对象的第 13 行,我给出了类似于 class Point 的类型参数,但我得到以下错误: ';'预期但找到“[”。 click Here to see the location of the error
我们如何为泛型 classes 创建伴生对象,以及我们如何使用伴生对象访问在其他一些驱动程序中的 class 中定义的方法?
你不能参数化一个对象,更重要的是,你不需要:)
对象是单例,它们的目的是捕获整个类型共有的东西,并且独立于具体实例(这就是为什么你的函数还需要 two Point
参数,而不是一个) .
object Point {
def isWithinDistance[T : Numeric](
point: Point[T],
otherPoint: Point[T],
distance: Double
) = point.getDistance(otherPoint) <= distance
}
附带说明一下,我看不出有任何理由将此函数放在伴随对象上。它应该是一个常规的 class 方法。