gpt4 book ai didi

scala - Scala 中的上下文边界和模式匹配

转载 作者:行者123 更新时间:2023-12-01 10:57:01 24 4
gpt4 key购买 nike

我正在 scala 中试验上下文边界,但我找不到对这两个函数中的任何一个进行类型检查的方法:

abstract class Expr
case class Val[T: Numeric](v: T) extends Expr
case object Other extends Expr

val e1 = Val(1)
val e2 = Val(2)

def addExp1(e1: Expr, e2: Expr): Expr = (e1, e2) match {
case (Val(v1), Val(v2)) => Val(v1+v2)
case _ => Other
}

def addExp2[T: Numeric](e1: Expr, e2: Expr): Expr = (e1, e2) match {
case (Val(v1: T), Val(v2: T)) => Val(v1+v2)
case _ => Other
}

在 addExp1 的情况下,我可以理解编译器在函数定义点没有信息知道 Val 的参数是数字,因此有一个 + 方法。它只是匹配 Any 作为 v1 的类型。

在 addExp2 的情况下,我怎样才能在模式中强制绑定(bind)?类型被“删除”...T注解被删除...

我梦想拥有的是一个单一的点来设置边界,理想情况下是在 Val 类的定义处。

最佳答案

问题是当你进行模式匹配时,Val 的两个实例可以有不同的类型参数,比如 Val[T1]Val[T2]

您可以按照@rjsvaljean 的建议修复该问题,并添加 import Numeric.Implicits._ 以使用漂亮的运算符表示法。

关于scala - Scala 中的上下文边界和模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14608176/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com