在 scala 中键入别名以在单独的包中使用

Type alias in scala for use in a separate package

我有两个文件,Vec3.scalaMain.scala。在 Vec3.scala 中,我定义了 Vec3 案例 class,它实现了各种不错的运算符,如 +unary_-、点积等。由于我将在我正在处理的项目中同时使用颜色和点,我的 C++ 直觉希望我将别名 Vec3 键入为 ColorPoint3,如下所示:

// Vec3.scala
package vec3

final case class Vec3(x: Float, y: Float, z: Float) {
  ...math functions...
}

type Color = Vec3
type Point3 = Vec3

但是,当我尝试使用 sbt 进行编译时,出现了以下我预料到的错误:

expected class or object definition
type Color = Vec3
^

我认为这是因为这些类型别名不存在于 class 或对象中,但我不希望它们存在,因为我更喜欢 ColorPoint3具有与 Vec3 本身相同的易用性。如果我使用的是 C++,我只是将这些定义放在一个头文件中,然后就此结束,但是唉。有没有办法在 Scala 中做到这一点,而不需要我的 vec3 包的用户每次在文件中使用它们时自己创建这些类型别名?或者是否有一些巧妙的 Scala 操作可以以不同的方式解决这个问题?

类型别名不能存在于 class、特征或 scala 2 中的对象之外。改为在 package object 中定义它们。