相关疑难解决方法(0)

自制提取器和案例类提取器之间的区别

根据scala规范,由case类构建的提取器如下(scala规范§5.3.2):

def unapply[tps](x: c[tps]) =
  if (x eq null) scala.None
  else scala.Some(x.xs11, ..., x.xs1k)
Run Code Online (Sandbox Code Playgroud)

出于实现原因,我希望能够在非案例类上模仿此提取器的行为.但是,我的实现无法重现相同的行为.

以下是我的差异示例:

trait A

sealed trait B[X <: A]{ val x: X }

case class C[X <: A](x: X) extends B[X]

class D[X <: A](val x: X) extends B[X]

object D {
  def unapply[X <: A](d: D[X]): Option[X] =
    if (d eq None) None
    else Some(d.x)
}

def ext[X <: A](b: B[X]) = b match {
  case C(x) => Some(x)
  case D(x) => Some(x)
  case _ …
Run Code Online (Sandbox Code Playgroud)

scala case-class extractor

6
推荐指数
1
解决办法
522
查看次数

标签 统计

case-class ×1

extractor ×1

scala ×1