4

我有这种情况

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,但它仍然不起作用。

无论如何在用作私有范围参数时为我的外部对象实现一个不错的快捷方式?我确实想保留对象的长名称,而且我有很多私有方法,这就是为什么它真的妨碍了我。

4

1 回答 1

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
于 2011-11-29T21:05:08.717 回答