对象中的Scala类型别名

时间:2015-07-27 07:45:14

标签: scala object types

我有一个具有某些类型别名定义的Object:

case class MyCaseClass(someType: SomeType)
object MyObject extends SomeType {

  type SomeType = Int => Boolean
}

IntelliJ告诉我,我必须导入SomeType,以便我的case类可以看到它,但后来编译器不满意并抱怨import语句的非法循环引用。我有几个其他对象声明如下:

object MyModule {
 object Obj1 { ... }
 object Obj2 { ... }
 object Obj3 { ... }
}

每个Obj都引用MyObject中定义的类型别名。

是否有最佳实践来封装类型?我应该将它们移动到特征中还是被视为滥用?建议?

1 个答案:

答案 0 :(得分:3)

您对象MyObject尝试从自己定义的类型继承。

object MyObject extends SomeType {
  type SomeType = Int => Boolean
}

所以,首先要做的是至少在MyObject之外定义它:

type SomeType = Int => Boolean
object MyObject extends SomeType {
  def apply(v1: Int): Boolean = ???
}

现在,由于你的问题信息很少,我建议你考虑一下你的设计。确定引用SomeType的位置,以及需要显示的位置。之后,您可以将其放入包级别的包对象中,以便所有引用方都可以看到它。