2011-11-23 19 views
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,但它仍然不起作用。

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

+0

我不相信这是可以使用类型别名成员作用域。 –

+0

我猜也一样。你尝试在X中放置类型别名吗?可能没有'.type'。 – mpartel

+0

@mpartel - 我试过你的建议。相同的结果,不起作用。我也尝试使用带有导入别名的'import',但仍然没有运气。 –

回答

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 
+0

不幸的是,因为'X'应该是可见的,所以在用户端,我们有例如'SuperHorribleLongName#X'。 –

+0

这就是命名空间的缺点,但是你可以提取你想要公开的符号。无论如何,我已经用另一种方法更新了我的答案。 – YvesgereY