我有这种情况

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

无论如何在用作私有(private)范围参数时为我的外部对象实现一个很好的快捷方式?我确实想保留对象的长名称,并且我有很多私有(private)方法,这就是它真正妨碍我的原因。

最佳答案

我确定它适合您的层次结构,但是将所有私有(private)方法放在一个

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

关于scala - 将外部对象的别名键入为私有(private)范围参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8246278/

10-12 16:32
查看更多