2014-07-16 36 views
0

我想實現一個自我型象特徵如下:自助式私人修飾符

trait HasEquipment { 
    this: {def loadEquipment: List[Equipment]} => 

    //more methods 
} 

現在我可以這個特質混入類和這些類必須定義一個「loadEquipment」方法:

case class Course(id: Long) extends HasEquipment { 
    def loadEquipment: List[Equipment] = { 
     //implementation 
    } 
} 

但是我不希望暴露給loadEquipment方法給大家,但只性狀。所以我想要做的是在Course課程中使loadEquipment私有,這樣只有特質才能訪問它。使它私密可以防止特徵訪問該方法。

是否有另一種方式使loadEquipment只能從特質內訪問?

回答

2

不知道爲什麼你想在這裏自我類型。抽象,保護成員的作品一樣好:

trait HasEquipment { 
    protected def loadEquipment: List[Equipment] 
} 

case class Course(id: Long) extends HasEquipment { 
    override protected def loadEquipment: List[Equipment] = ??? 
} 

作爲一個側面說明,結構類型Scala中使用反射,這就是爲什麼他們通常回避的原因。