在 Scala 中从字符串创建复杂数据

Create complex data from Strings in Scala

我已经定义了很多case类比如

1
2
3
4
  abstract class Foo
  case class Bar(s: String) extends Foo
  case class Baz(f: Foo) extends Foo
  case class FooBar(l: Foo, r:Foo)

允许我创建复杂的数据,例如,

1
  val x = FooBar(Bar("1"), Baz(Bar("2")))

我想从字符串中读取这些类型的数据,比如

1
  val x = what_to_do_here?("FooBar(Bar("1"), Baz(Bar("2")))")

在动态语言中,我只会调用 eval。
(编辑:我真的不想在 scala 中调用类似 eval 的东西)

我在 scala 中提出的解决方案是编写一个解析器。有没有更简单的方法来做到这一点?


您假设存在一个与 toString 对称的构造。我很确定没有。

由于您正在讨论的是一个经典的序列化/反序列化方案,您可能想要研究一个序列化库(想到的一种可能性是 lift-json,我已经取得了相当大的成功,但是当然有替代品)。要么,要么我完全错过了你的使用场景:-)


您可以使用 scala 解释器来编写您自己的 eval 函数。由于解释器实际上是一个编译器,我认为这不会很快。