【发布时间】:2020-10-31 21:38:24
【问题描述】:
我有两个文件,Vec3.scala 和 Main.scala。在Vec3.scala 中,我定义了Vec3 案例类,它实现了各种不错的运算符,如+、unary_-、点积等等。由于我将在我正在处理的项目中同时使用颜色和点,我的 C++ 直觉希望我将别名 Vec3 键入为 Color 和 Point3,如下所示:
// 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
^
我认为这是因为这些类型别名不存在于类或对象中,但我不希望它们存在,因为我更希望 Color 和 Point3 具有与 @987654335 相同的易用性@ 本身。如果我使用的是 C++,我只是将这些定义放在头文件中,然后就结束了,但是唉。有没有办法在 Scala 中做到这一点,而不必让我的 vec3 包的用户每次在文件中使用这些类型别名时自己制作这些类型别名?或者是否有一些漂亮的 Scala 策略以不同的方式解决了这个问题?
【问题讨论】:
标签: scala package type-alias