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

Scalaでは、Java(およびPythonでさえ、ライブラリは通常慣例に従いますが)と同様に.toString、コンパイルされてオブジェクトを再作成するものが生成されるという保証はありません。実際、やなどの一般的な型は、LongそれらStringを再作成するために使用できる文字列出力を生成しません。

インスタンスの再作成に使用できる出力を生成する標準的な方法は、シリアル化によるものであることに注意してください。それがあなたが望むものなら、それを調べてください。

于 2012-05-18T23:26:37.907 に答える
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 に答える
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 に答える