无法解决 unapply
Unable to resolve unapply
object micro extends App {
sealed trait FuncExpr
sealed trait FuncSpecialize
sealed case class Func(i:Int) extends FuncExpr
sealed case class Cube(b:Boolean) extends FuncSpecialize
object Cube {
def unapply(arg:Func) : Option[Boolean] = arg match {
case Func(i) if i == 42 => Some(true)
case _ => None
}
}
val x : FuncSpecialize = Cube(true)
x match {
case Cube(b) => println("Success")
}
}
这是一个最小化的示例,其中我尝试为案例 class 多维数据集实现自定义取消应用方法以及默认取消应用方法。但是,如果尝试模式匹配 x 我会收到以下错误消息,我不希望发生这种情况,因为 Func 和 FuncSpezialize 是完全不同的类型:
Error:(19, 10) cannot resolve overloaded unapply
case Cube(b) => println("Success")
Error:(19, 10) overloaded method value unapply with alternatives:
(x[=11=]: micro.Cube)Option[Boolean] <and>
(arg: micro.Func)Option[Boolean]
cannot be applied to (micro.FuncSpecialize)
case Cube(b) => println("Success")
知道为什么会这样吗?
由于 Cube
是一个案例 class,编译器为其生成了 unapply
object Cube {
// auto-generated
def unapply(arg: Cube): Option[Boolean] = Some(arg.b)
// custom
def unapply(arg:Func) : Option[Boolean] = arg match {
case Func(i) if i == 42 => Some(true)
case _ => None
}
}
现在当您尝试匹配模式时
val x : FuncSpecialize = Cube(true)
x match {
case Cube(b) => println("Success")
}
实际上是一个电话Cube.unapply(x)
。您不能将任何 unapply
方法应用于 FuncSpecialize
类型的 x
。
object micro extends App {
sealed trait FuncExpr
sealed trait FuncSpecialize
sealed case class Func(i:Int) extends FuncExpr
sealed case class Cube(b:Boolean) extends FuncSpecialize
object Cube {
def unapply(arg:Func) : Option[Boolean] = arg match {
case Func(i) if i == 42 => Some(true)
case _ => None
}
}
val x : FuncSpecialize = Cube(true)
x match {
case Cube(b) => println("Success")
}
}
这是一个最小化的示例,其中我尝试为案例 class 多维数据集实现自定义取消应用方法以及默认取消应用方法。但是,如果尝试模式匹配 x 我会收到以下错误消息,我不希望发生这种情况,因为 Func 和 FuncSpezialize 是完全不同的类型:
Error:(19, 10) cannot resolve overloaded unapply
case Cube(b) => println("Success")
Error:(19, 10) overloaded method value unapply with alternatives:
(x[=11=]: micro.Cube)Option[Boolean] <and>
(arg: micro.Func)Option[Boolean]
cannot be applied to (micro.FuncSpecialize)
case Cube(b) => println("Success")
知道为什么会这样吗?
由于 Cube
是一个案例 class,编译器为其生成了 unapply
object Cube {
// auto-generated
def unapply(arg: Cube): Option[Boolean] = Some(arg.b)
// custom
def unapply(arg:Func) : Option[Boolean] = arg match {
case Func(i) if i == 42 => Some(true)
case _ => None
}
}
现在当您尝试匹配模式时
val x : FuncSpecialize = Cube(true)
x match {
case Cube(b) => println("Success")
}
实际上是一个电话Cube.unapply(x)
。您不能将任何 unapply
方法应用于 FuncSpecialize
类型的 x
。