加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala中的模式匹配

发布时间:2020-12-16 18:43:42 所属栏目:安全 来源:网络整理
导读:scala (1,5) == BigInt(12) /% 7res3: Boolean = truescala BigInt(12) /% 7 match { | case (1,5) = true | }console:9: error: type mismatch;found : Int(1)required: scala.math.BigInt case (1,5) = true ^ 也许有人可以在这里解释我如何模式匹配? 解
scala> (1,5) == BigInt(12) /% 7
res3: Boolean = true

scala> BigInt(12) /% 7 match {
 | case (1,5) => true
 | }

<console>:9: error: type mismatch;
found   : Int(1)
required: scala.math.BigInt
          case (1,5) => true
                ^

也许有人可以在这里解释我如何模式匹配?

解决方法

匹配比平等更具体;你不能只是平等,你也必须拥有相同的类型.

在这种情况下,BigInt不是案例类,并且在其伴随对象中没有unapply方法,因此您无法直接匹配它.你能做的最好的是

BigInt(12) /% 7 match {
    case (a: BigInt,b: BigInt) if (a==1 && b==5) => true
    case _ => false
  }

或其某些变体(例如,情况ab如果(ab ==(1,5))=>).

或者,您可以使用适当类型的unapply方法创建对象:

object IntBig { def unapply(b: BigInt) = Option(b.toInt) }

scala> BigInt(12) /% 7 match { case (IntBig(1),IntBig(5)) => true; case _ => false }
res1: Boolean = true

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读