Как конвертировать "Some (123)" в 123 in scala - PullRequest
0 голосов
/ 10 марта 2020

У меня проблема с развертыванием Some (значение) в scala. Это двойное значение, возвращаемое из утилиты.

val result = "Some(Map(email -> Some(test@example.com), userId -> Some(123)))"

и тип возвращаемого значения вспомогательного метода: Option[Map[String, String]]

Ожидаемый результат должен составлять

val user = "123"
val email = "test@example.com"

Спасибо

Ответы [ 2 ]

2 голосов
/ 10 марта 2020

Вы не можете создавать переменные из String, потому что идентификаторы (имена переменных) должны существовать во время компиляции, в то время как строки являются объектами времени выполнения.

Но вы можете сделать что-то подобное.

val inputStr =
      "Some(Map(email -> Some(test@example.com), userId -> Some(123)))"

val getSomeRE = raw"([^\s(]+)\s*->\s*Some\(([^)]+)".r
val rsltMap = getSomeRE.findAllMatchIn(inputStr)
                       .map(m => m.group(1) -> m.group(2))
                       .toMap
                       .withDefaultValue("no such")

rsltMap("email")   //res0: String = test@example.com
rsltMap("userId")  //res1: String = 123
rsltMap("phone")   //res2: String = no such
0 голосов
/ 10 марта 2020
import scala.reflect.runtime.universe
import scala.tools.reflect.ToolBox

object Test extends App {
  val result = """Some(Map("email" -> Some("test@example.com"), "userId" -> Some("123")))"""
  val cm = universe.runtimeMirror(getClass.getClassLoader)
  val tb = cm.mkToolBox()
  val str: Any = tb.eval(tb.parse(result))
  val parsedMap: Option[Map[String, Option[String]]] = str.asInstanceOf[Some[Map[String, Option[String]]]]

  println(parsedMap)
  val m: Map[String, Option[String]] = parsedMap.toList.flatten.toMap
  val userAndEmail = (m("userId").getOrElse(""), m("email").getOrElse(""))
  val user: String = userAndEmail._1.toString
  val email: String = userAndEmail._2.toString

  println(user, email)

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...