2014-05-15 62 views
2

對於以下HwLogger.PersisterType枚舉:訪問(/進口)斯卡拉枚舉

object HwLogger extends Serializable { 

    object PersisterType extends Enumeration { 
    type Persisters = Value 
    val FilePersister, HdfsPersister, SocketPersister = Value 
    } 

} 

在同伴類 - 我們如何訪問呢?請注意以下進口擺..

class HwLogger extends Serializable { 
    import collection.mutable.ArrayBuffer 
    import HwLogger.PersisterType._ 
    import HwLogger.PersisterType 
    var persisterTypes = ArrayBuffer[PersisterType]() // Compiler says " error: not found: type PersisterType" 
    def setDefaults : Unit = { 
    import PersisterType._ 
    persisterTypes ++ FilePersister ++ HdfsPersister 
    } 

} 

UPDATE接受的答案後(在arraybuffer和語法修正追加運營商)這裏是更正後的代碼:

object HwLogger extends Serializable { 

    object PersisterType extends Enumeration { 
    type Persisters = Value 
    val FilePersister, HdfsPersister, SocketPersister = Value 
    } 

} 

class HwLogger extends Serializable { 
    import collection.mutable.ArrayBuffer 
    import HwLogger.PersisterType._ 
    import HwLogger.PersisterType 
    var persisterTypes = ArrayBuffer[Persisters]() // This is the fix (Persisters instead of PersisterType) 
    def setDefaults : Unit = { 
    import PersisterType._ 
    persisterTypes :+ FilePersister :+ HdfsPersister 
    } 

} 

**另一個更新* *

改變枚舉對象將避免麻煩:

object HwLogger extends Serializable { 

    object PersisterType extends Enumeration { 
    type PersisterType = Value // Changed the "type" to be same as object name 
    val FilePersister, HdfsPersister, SocketPersister = Value 
    } 

} 

class HwLogger extends Serializable { 
    import collection.mutable.ArrayBuffer 
    import HwLogger.PersisterType._ 
    import HwLogger.PersisterType 
    var persisterTypes = ArrayBuffer[PersisterType]() // Revert back to PersisterType 
    def setDefaults : Unit = { 
    import PersisterType._ 
    persisterTypes :+ FilePersister :+ HdfsPersister 
    } 

} 

回答

3

枚舉中元素的類型是Persisters,而不是PersisterTypePersisterType只是一個值。您需要導入PersisterType中的類型和值以使用Enumeration

class HwLogger extends Serializable { 
    import collection.mutable.ArrayBuffer 
    import HwLogger.PersisterType._ 
    val persisterTypes = ArrayBuffer[Persisters]() 
    def setDefaults: Unit = { 
    persisterTypes += FilePersister += HdfsPersister 
    } 
} 
+0

wingedsubmariner?翅膀如何在水下運動? – javadba

+0

我看着你的代碼和你的評論。請注意OP中已經包含以下導入:import HwLogger.PersisterType._那麼您建議的新邏輯是什麼? – javadba

+0

'ArrayBuffer [Persisters]'是您需要的關鍵變化。至於名稱,我只是喜歡它喚起的圖像:) – wingedsubmariner