繁体   English   中英

scala.MatchError:在scala上为null

[英]scala.MatchError: null on scala

我收到以下错误.. scala.MatchError:null

我的代码有问题吗? 如果是这样,我该如何解决?

val a : Option[String] = {
  company.customUrl match {
    case Some(a) => company.a
    case None => null
  }
}

val b :Option[String] = {
  company.b match {
    case Some(b) => company.b
    case _ => null
  }
}

val c : Option[Long] = {
  company.c match {
    case Some(c) => Option(company.c.get.toLong)
    case _ => null
  }
}

a,b,c的返回类型都是Òption ,但每隔第二种情况的原始类型null都不是。 尝试返回None

a第二种情况应该抓住所有_

b也可以简化为val b :Option[String] = company.b

在第一种情况下,您的customUrl必须为null值:

scala> (null: Any) match { case Some(x) => x ; case None => ??? }
scala.MatchError: null
  ... 29 elided

最好尽快在Option中包装可为空的值,而不要对其进行包装。 特别是,请勿将“选项”设置为null。

Option是为了完全避免null Option永远不应为null 相反,它应该为None 因此,您不应该做这种奇怪的舞蹈:

val a: Option[String] = company.customUrl match {
  case Some(a) => company.a
  case None => null
}

只是val a = company.customUrl就可以了。

这也可能是MatchError的原因。 由于代码的其他部分, company.customUrlcompany.bcompany.c一个或多个为null

重申: Option永远不能为null 此外,在Scala中,请始终尝试避免使用null并更喜欢Option

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM