代码之家  ›  专栏  ›  技术社区  ›  bbarker

在Scala 3中,有没有一种方法可以禁用一种语言:在一个区域内禁用质量(多功能平等)?

  •  0
  • bbarker  · 技术社区  · 3 年前

    想要这样做的特殊原因是仍然能够对来自超类的值使用模式匹配。例如,我希望能够与 case None 当查看类型的值时 Option[Throwable] ,但这似乎不可能,因为 Throwable 没有,也永远不会(我想)有 CanEqual 例子

    0 回复  |  直到 3 年前
        1
  •  8
  •   Mario Galic    3 年前

    试着像这样限制givens的范围

      val x: Option[Throwable] = None
      {
        given CanEqual[Option[Throwable], Option[Throwable]] = CanEqual.derived
        x match {
          case Some(v) => v
          case None => new Throwable()
        }
      } // after this brace CanEqual given is out-of-scope
    
      x match {
        case Some(v) => v
        case None => new Throwable()
      } // compile-time error: Values of types object None and Option[Throwable] cannot be compared with == or !=