Scala 扩展枚举

Scala 扩展枚举,scala,Scala,我已经实现了一个方法withNameOption,如果找不到具有特定名称的枚举成员,则该方法返回None,但我很难将其提取到一个trait,以便将其用于应用程序中的所有枚举。目前代码如下所示: object FileType extends Enumeration with EnumUtils { type FileType = Value def withNameOption(name: String): Option[FileType] = try { Some(withN

我已经实现了一个方法
withNameOption
,如果找不到具有特定名称的枚举成员,则该方法返回
None
,但我很难将其提取到一个trait,以便将其用于应用程序中的所有枚举。目前代码如下所示:

object FileType extends Enumeration with EnumUtils {
  type FileType = Value

  def withNameOption(name: String): Option[FileType] = try {
    Some(withName(name))
  } catch {
    case _: NoSuchElementException => None
  }
  val scala, java, ruby = Value
}

尽可能使用
this.type
不会进行打字检查。

您看到的具体错误是什么


您可能更喜欢使用“pimp my library模式”将此方法添加到现有枚举中,而不是使用trait。

我认为这就是您正在寻找的模式:

trait EnumUtils {
  thisenum: Enumeration =>

  def withNameOption(name: String): Option[thisenum.type#Value] = try {
    Some(thisenum.withName(name))
  } catch {
    case _: NoSuchElementException => None
  }
}

object FileType extends Enumeration with EnumUtils {
  type FileType = Value

  val scala, java, ruby = Value
}

object Test {
  def main(args: Array[String]): Unit = {
    println("Python: " + FileType.withNameOption("python"))
    println("Scala: " + FileType.withNameOption("scala"))
  }
}

是的,那正是我想要的。我在哪里可以读到关于
thisenum:Enumeration=>
行的内容,因为目前这一切看起来都很神奇?这似乎是我能很快找到的最好的东西: