2011-11-23 18 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