Создание сложных данных из строк в Scala - PullRequest
3 голосов
/ 27 сентября 2011

Я определил ряд классов дел, таких как

  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. (Правка: я действительно не хочу называть что-то вроде eval в scala)

Решение, которое я придумал в scala, - написать парсер.Есть ли более простой способ сделать это?

Ответы [ 2 ]

2 голосов
/ 27 сентября 2011

Вы предполагаете, что существует конструкция, симметричная с toString. Я уверен, что нет ни одного.

Так как вы обсуждаете классический сценарий сериализации / десериализации, вы можете захотеть заглянуть в библиотеку сериализации (одна из возможных вещей, которая приходит на ум, это lift-json , которая у меня была значительный успех, но есть, конечно, альтернативы). Либо так, либо я полностью пропустил ваш сценарий использования: -)

1 голос
/ 27 сентября 2011

Вы можете использовать интерпретатор scala для написания собственной функции eval . Поскольку интерпретатор на самом деле является компилятором, я не думаю, что это будет очень быстро.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...