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

scala – 为什么在替代模式中不允许使用变量?

发布时间:2020-12-16 09:32:22 所属栏目:安全 来源:网络整理
导读:通常你有“对称”的比赛,并想写这样的东西: def g(p:(Int,Int)) = p match { case (10,n) | (n,10) = println(n) case _ = println("nope")} 这是不允许的,但是如果每个备选方案具有相同类型的变量,这不应该是一个问题,因为它可以转换为单独的情况: de
通常你有“对称”的比赛,并想写这样的东西:

def g(p:(Int,Int)) = p match {
  case (10,n) | (n,10) => println(n)
  case _ => println("nope")
}

这是不允许的,但是如果每个备选方案具有相同类型的变量,这不应该是一个问题,因为它可以转换为单独的情况:

def g(p:(Int,n) => println(n)
  case (n,10) => println(n)
  case _ => println("nope")
}

那么为什么我们有这个限制呢?

解决方法

可能因为需要一些时间来实施,而且在别的地方花更多的时间。它也将不必要地增加语言及其编译器的复杂性。正如你已经提到的,这个问题可以很容易地避免。避免这个问题的另一种方法是编写一个自定义提取器:

object ThisOrThat {
  def unapply(p:(Int,Int)):Option[Int] = p match {
    case (10,n) => Some(n)
    case (n,10) => Some(n)
    case _ => None
  }
}

(编辑:李大同)

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

    推荐文章
      热点阅读