【问题标题】:Scala Type Alias In Object对象中的 Scala 类型别名
【发布时间】:2015-07-27 07:45:13
【问题描述】:

我有一个有一些类型别名定义的对象:

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

  type SomeType = Int => Boolean
}

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

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

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

是否有封装类型的最佳实践?我应该以某种特征移动它们还是将其视为滥用?有什么建议吗?

【问题讨论】:

    标签: scala object types


    【解决方案1】:

    你的对象 MyObject 试图从一个自己定义的类型继承。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-24
      • 2017-04-15
      • 1970-01-01
      • 1970-01-01
      • 2013-03-18
      • 1970-01-01
      相关资源
      最近更新 更多