加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 09:23:15 所属栏目:安全 来源:网络整理
导读:有没有办法自动解析一个字符串的案例对象,在Scala?使用一些内建/自动生成的Scala函数? 例如,我有这些case对象:(请注意,有一个密封的父类) abstract sealed class FlagReasoncase object Spam extends FlagReasoncase object Illegal extends FlagReasonca
有没有办法自动解析一个字符串的案例对象,在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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读