内置对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) } } 或者,您可以考虑使用提供此设施的 object FlagReason extends Enumeration { val Spam,Other = Value } 然后,您可以使用FlagReason withName“< name>”获取特定的枚举值,或者安全地使用Try(FlagReason withName“< name>”)的选项toOption. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |