为外部对象键入别名作为私有范围参数

时间:2011-11-23 17:11:28

标签: scala self-type type-alias

我有这种情况

object SuperHorribleLongName {
   trait X {
       private[SuperHorribleLongName] def internalGaga() : Unit
   }
}

我想尝试这样的工作:

object SuperHorribleLongName {
   private type Sup = SuperHorribleLongName.type
   trait X {
       private[Sup] def internalGaga() : Unit
   }
}

但这只是给了我"error: Sup is not an enclosing class" ...我也试过了type Sup = this.type,但它仍无效。

当使用私有作用域参数时,无论如何要为我的外部对象实现一个很好的快捷方式?我想要保留对象的长名称,并且我有很多的私有方法,这就是为什么它真的以我的方式。

1 个答案:

答案 0 :(得分:0)

我知道它确定它适合您的层次结构,但是如何将所有私有方法放在

private trait Y {

否则,您始终可以模仿命名空间:

object SuperHorribleLongName {
object SHLN { //Dummy alias
  trait X {
     private[SHLN] def internalGaga() : Unit
  }
}
type X = SHLN.X  //Lift into main object
}

这并不令人满意,因为SHLN是可见的,转动它private可以防止抬起X.它很乱。
所以,让我们把问题转化为内外:

private object SHLN {
   trait X {
     private[SHLN] def internalGaga() : Unit
  }
}

//Expose the instance under wanted name
val SuperHorribleLongName = SHLN