【发布时间】:2011-11-23 17:00:07
【问题描述】:
在 Scala 中,有没有办法自动从字符串中解析 case 对象?使用一些内置/自动生成的 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("Spam") 将返回 Spam 案例对象。
如果有,那我就不用自己写了——我已经这样做了:
object FlagReason {
def fromString(value: String): FlagReason = value match {
case "Spam" => Spam
case "Illegal" => Illegal
case "CopyrightViolation" => CopyrightViolation
case "Other" => Other
}
}
背景:我正在将我的案例对象转换为我在 html 表单中用作单选按钮值的字符串。当我处理提交的表单时,我将选定的值转换回案例对象。
相关信息:这实际上可以通过 Java 枚举实现,参见例如这个 StackOverflow 问题:Lookup enum by string value
((我不认为我在寻找 Scala 的解析器组合器。我想如果我使用它们我仍然需要自己定义解析规则,而不是内置“自动”字符串来区分大小写对象转换))
【问题讨论】:
-
请注意,您的链接显示 C# 枚举。顺便说一句,你能提供一个场景,你真正需要这样的功能吗?
-
@agilesteel:我已经修复了链接,谢谢。我还添加了一些关于我为什么要进行这种转换的信息。