0

我有一个List[List[]]

List(List(1,2), List(3,4))

如果我打电话toString()给它

List(List(1,2), List(3,4)).toString()

如果可以,是否可以恢复原件List[List[]],如何?

谢谢。

4

3 回答 3

2

你只想解析你得到的字符串toString吗?如果是这样,则没有本地方法可以做到这一点(例如 Pythoneval或 Haskell 的),但您可以使用Scala 解析器组合库read轻松实现自己的功能:

import scala.util.parsing.combinator._    

object parseIntListList extends RegexParsers {
  def list = "List(" ~> repsep("\\d+".r ^^ (_.toInt), ",") <~ ")"
  def apply(s: String) = parse("List(" ~> repsep(list, ",") <~ ")", s)
}

现在parseIntListList(List(List(1, 2), List(3, 4)).toString)做你想要的,解析器对额外的空白等很健壮。

不过,几乎可以肯定,在 Scala 中做任何你想做的事情都有更好的方法。

于 2012-05-18T20:47:35.207 回答
2

在 Scala 中,与在 Java 中(甚至 Python,尽管库通常保持约定)一样,并不能保证 a.toString会产生一个经过编译后会重新创建对象的东西。事实上,常见类型如LongString不会产生可用于重新创建它们的字符串输出。

请注意,产生可用于重新创建实例的输出的标准方法是通过序列化。如果这就是你想要的,请查一下。

于 2012-05-18T23:26:37.907 回答
0

你知道它是一个 Int 列表吗?

val li = List(List(1,2), List(3,4))
val s = li.toString 

s.replaceAll ("[^0-9) ]", "").split ("\\)").map(_.split (" ").filterNot (_.equals ("")).map (_.toInt).toList).toList
res86: List[List[Int]] = List(List(1, 2), List(3, 4))
于 2012-05-19T00:45:03.657 回答