У меня есть List[List[]]
Scala Список ToString()
List(List(1,2), List(3,4))
Если я позвоню toString()
на нем
List(List(1,2), List(3,4)).toString()
Можно ли восстановить обратно оригинальный List[List[]]
если да, то как?
Спасибо.
У меня есть List[List[]]
Scala Список ToString()
List(List(1,2), List(3,4))
Если я позвоню toString()
на нем
List(List(1,2), List(3,4)).toString()
Можно ли восстановить обратно оригинальный List[List[]]
если да, то как?
Спасибо.
В Scala, как и в Java (и даже Python, хотя библиотеки обычно придерживаются соглашения), нет никакой гарантии, что .toString
создаст что-то, что скомпилировано, будет воссоздавать объект. Фактически, обычные типы, такие как Long
и String
, не создают вывод строки, который можно использовать для их воссоздания.
Обратите внимание, что стандартный способ получения вывода, который может использоваться для воссоздания экземпляров, составляет Сериализация. Если это то, что вы хотите, посмотрите.
Вы просто хотите разобрать строку, которую вы получаете от toString
? Если да нет родного способа сделать это (как в Python eval
или Хаскель 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.
Знаете ли вы, что это список из списка 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))
Я не полагаюсь на преобразование вывода toString в объект. что, если изменяется реализация toString? Почему у вас есть такое требование, и можете ли вы использовать любые другие средства для сериализации информации? – aishwarya