Scala 选项和一些不匹配

Scala Option and Some mismatch

我想将省份解析为大小写class,它抛出不匹配

scala.MatchError:一些(美国)(class scala.Some)

  val result = EntityUtils.toString(entity,"UTF-8")
  val address = JsonParser.parse(result).extract[Address]

  val value.province = Option(address.province)
  val value.city = Option(address.city)
case class Access(
                    device: String,
                    deviceType: String,
                    os: String,
                    event: String,
                    net: String,
                    channel: String,
                    uid: String,
                    nu: Int,
                    ip: String,
                    time: Long,
                    version: String,
                    province: Option[String],
                    city: Option[String],
                    product: Option[Product]
                  )

假设起点:

val province: Option[String] = ???

您可以通过简单的模式匹配得到字符串:

province match {
  case Some(stringValue) => JsonParser.parse(stringValue).extract[Province] //use parser to go from string to a case class
  case None => .. //maybe provide a default value, depends on your context
}

注意:不知道是什么 extract[T] returns 很难推荐跟进

这个:

val value.province = Option(address.province)
val value.city = Option(address.city)

并不像您认为的那样。它试图将 value.provincevalue.city 视为 extractors(与类型不匹配,因此 scala.MatchError 异常)。它不会像我相信你想要的那样改变 value (因为 value 显然没有这样的设置器)。

由于 value(显然)是 Access 案例 class,它是不可变的,您只能获得更新的副本:

val value2 = value.copy(
  province = Option(address.province),
  city     = Option(address.city)
)