【发布时间】:2013-02-06 23:45:42
【问题描述】:
是否可以在编译时强制传递给方法的Vector 的大小?我想使用空间中看起来像这样的点集合来建模一个 n 维欧几里得空间(这就是我现在所拥有的):
case class EuclideanPoint(coordinates: Vector[Double]) {
def distanceTo(desination: EuclieanPoint): Double = ???
}
如果我有一个通过EuclideanPoint(Vector(1, 0, 0)) 创建的坐标,则它是一个 3D 欧几里得点。鉴于此,我想确保在对 distanceTo 的调用中传递的目标点具有相同的维度。
我知道我可以通过使用Tuple1 到Tuple22 来做到这一点,但是我想表示许多不同的几何空间,如果我使用Tuples 的话,我将为每个空间编写 22 个类 - 有吗更好的方法?
【问题讨论】:
-
我不能有意识地把它作为一个答案,但它可能符合一个想法......我想到的第一件事是结合一个值类(2.10 中的新功能)使用路径相关类型来获取表示 s 特定整数的类型。我真的不知道这是否可以奏效。当一天的工作结束时,我可能会尝试一下...参见 SIP 15:docs.scala-lang.org/overviews/core/value-classes.html
-
这种约束可以用“类型级编程”编码。例如,参见Apocalisp blog series,尤其是 HList。
标签: scala tuples compile-time type-systems