微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

内置对Scala案例对象的字符串解析?

有没有办法自动解析一个字符串的案例对象,在Scala?使用一些内建/自动生成的Scala函数

例如,我有这些case对象:(请注意,有一个密封的父类)

abstract sealed class FlagReason

case object Spam extends FlagReason
case object Illegal extends FlagReason
case object copyrightViolation extends FlagReason
case object Other extends FlagReason

我想知道是否有一些自动生成函数如下:

FlagReason.fromString(value:String):FlagReason

FlagReason(“垃圾邮件”)将返回垃圾邮件大小写对象.

如果有的话,我不需要写我自己的 – 我做了:

object FlagReason {
  def fromString(value: String): FlagReason = value match {
    case "Spam" => Spam
    case "Illegal" => Illegal
    case "copyrightViolation" => copyrightViolation
    case "Other" => Other
  }
}

背景:我将我的案例对象转换为字符串,我用作html表单中的单选按钮值.当我处理提交的表单时,我将选择的值转换为一个case对象.

相关信息:这实际上可以用Java枚举,这个StackOverflow问题:Java enum converting string to enum

((我不认为我正在寻找Scala的解析器组合器),我想这是我使用它,我仍然需要自己定义解析规则,而不是内置“自动”字符串到案例对象转换) )

解决方法

否,不会自动生成此类方法.你将必须编写自己的fromString方法.请注意,您可以更紧密地写下如下:

object FlagReason {
  def fromString(value: String): Option[FlagReason] = {
    Vector(Spam,Illegal,copyRightViolation,Other).find(_.toString == value)
  }
}

或者,您可以考虑使用提供此设施的scala.Enumeration.

object FlagReason extends Enumeration {
  val Spam,Other = Value
}

然后,您可以使用FlagReason withName“< name>”获取特定的枚举值,或者安全地使用Try(FlagReason withName“< name>”)的选项toOption.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐