从Scala中的Strings创建复杂数据

时间:2011-09-27 04:27:27

标签: scala

我定义了许多案例类,例如

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

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

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

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

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

在动态语言中,我只需要调用eval。 (编辑:我真的不想在scala中调用像eval这样的东西)

我在scala中提出的解决方案是编写一个解析器。有更简单的方法吗?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

您可以使用scala interpreter to write your own eval function。由于解释器实际上是一个编译器,我认为这不会很快。