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

从Scala中的字符串创建复杂数据,scala,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

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

  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中提出的解决方案是编写一个解析器。有更简单的方法吗?

您可以使用。由于解释器实际上是一个编译器,我认为这不会很快。

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


因为您讨论的是一个经典的序列化/反序列化场景,所以您可能希望研究序列化库(想到的一种可能性是,我已经取得了相当大的成功,但肯定有其他选择)。要么如此,要么我完全错过了您的使用场景:-)

相关:它确实是一个反序列化的szenario。但是,我无法控制序列化的输出(因为我不拥有代码),因此不能使用库。我想我必须编写一个小的解析器,正如您所建议的,您可以通过集成Scala REPL来模拟它,但我不推荐它。一个简单的解析器实现起来要简单得多,并且不容易出错(假设有一组合理的类)。