有没有办法自动解析一个字符串的案例对象,在Scala?使用一些内建/自动生成的Scala函数?
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 举报,一经查实,本站将立刻删除。