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

Scala 为外部对象键入别名作为私有范围参数,scala,self-type,type-alias,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]

我有这种情况

object SuperHorribleLongName {
   trait X {
       private[SuperHorribleLongName] def internalGaga() : Unit
   }
}
我正试图让这样的东西起作用:

object SuperHorribleLongName {
   private type Sup = SuperHorribleLongName.type
   trait X {
       private[Sup] def internalGaga() : Unit
   }
}
但这只是给了我一个“错误:Sup不是一个封闭类”。。。我还尝试了
typesup=this.type
,但仍然不起作用


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

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

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

我不相信在成员范围中使用类型别名是可能的。我猜也是这样。您是否尝试将类型别名放在X中?可能没有
.type
@mpartel——我试过你的建议。同样的结果,不起作用。我还尝试将
import
与导入别名一起使用,但仍然没有成功。当然,愚蠢的解决方案是首先不使用
SuperHorribleLongName
。@我们将实际使用
DeterministicSkipOctree
,它的字符计数甚至高于
SuperHorribleLongName
,我真的很想保留这个名字,但我想在里面用一个缩写,因为
private[DeterministicSkipOctree]
确实会损害可读性。我不明白为什么键入别名或导入别名不起作用。不幸的是,不起作用,因为
X
应该是可见的,因此在用户端我们有
superOrribleLongName#X
。这是名称空间的缺点,但您可以取消要公开的符号。无论如何,我已经用另一种方法更新了我的答案。