scala - 访问(/导入)Scala 枚举

标签 scala enumeration

对于以下 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 
  }

}

更新在接受答案(以及数组缓冲区追加运算符的语法更正)之后,这里是更正后的代码:

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
  }

}

最佳答案

枚举中元素的类型是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 
  }
}

关于scala - 访问(/导入)Scala 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23688791/

相关文章:

java - 枚举接口(interface)和 vector 类

php - 使用 zend 框架(ZF)进行枚举管理?

java - 如何以原始顺序读取java中的属性文件

arrays - 使用枚举查找数组(Swift 5)中的所有组合

scala - 无法访问 Scala 中相对路径中的文件以获取测试资源

方法尝试访问不存在的案例类成员时的 Scala 隐式方法编译

scala - 如何创建 com.google.common.collect.HashBiMap

scala - 从上到下打印供应商段

scala - Akka Streams 在处理 n 个元素后停止流

swift - 将 NSURL.scheme 转换为 SecProtocolType 的既定方法?