我有一个List[List[]]
List(List(1,2), List(3,4))
如果我打电话toString()
给它
List(List(1,2), List(3,4)).toString()
如果可以,是否可以恢复原件List[List[]]
,如何?
谢谢。
你只想解析你得到的字符串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 中做任何你想做的事情都有更好的方法。
在 Scala 中,与在 Java 中(甚至 Python,尽管库通常保持约定)一样,并不能保证 a.toString
会产生一个经过编译后会重新创建对象的东西。事实上,常见类型如Long
和String
不会产生可用于重新创建它们的字符串输出。
请注意,产生可用于重新创建实例的输出的标准方法是通过序列化。如果这就是你想要的,请查一下。
你知道它是一个 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))