【问题标题】:Type alias in scala for use in a separate package在 scala 中键入别名以在单独的包中使用
【发布时间】:2020-10-31 21:38:24
【问题描述】:

我有两个文件,Vec3.scalaMain.scala。在Vec3.scala 中,我定义了Vec3 案例类,它实现了各种不错的运算符,如+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
^

我认为这是因为这些类型别名不存在于类或对象中,但我不希望它们存在,因为我更希望 ColorPoint3 具有与 @987654335 相同的易用性@ 本身。如果我使用的是 C++,我只是将这些定义放在头文件中,然后就结束了,但是唉。有没有办法在 Scala 中做到这一点,而不必让我的 vec3 包的用户每次在文件中使用这些类型别名时自己制作这些类型别名?或者是否有一些漂亮的 Scala 策略以不同的方式解决了这个问题?

【问题讨论】:

    标签: scala package type-alias


    【解决方案1】:

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

    【讨论】:

    • 其他选项是使用像包这样的对象,例如我会将这三个都放在object model
    猜你喜欢
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多