Scala List toString()

时间:2012-05-18 19:37:43

标签: list scala

我有List[List[]]

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

如果我打电话给toString()

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

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

感谢。

3 个答案:

答案 0 :(得分:2)

您是否只想解析从toString获得的字符串?如果是这样的话,没有本地方法可以做到这一点(例如Python的eval或Haskell的read),但你可以很容易地使用Scala parser combinator library推出自己的方式:

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尝试做的事情。

答案 1 :(得分:2)

在Scala中,就像在Java中一样(甚至是Python,虽然库通常遵循约定),但不能保证.toString会生成一些已编译的内容,它将重新创建该对象。事实上,LongString等常见类型不会产生可用于重新创建它们的字符串输出。

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

答案 2 :(得分: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))