我想重用现有的提取器并组合它们。A => Option[B]
完美匹配B => Option[C]
。
但我很困惑,我怎么能在代码中表达这种关系。
显而易见的方法不可用是有充分理由的:
type Extractor[F,T] = {
def unapply(from : F) : Option[T]
}
def bind[A,B,C](l : Extractor[A,B], r : Extractor[B,C]) = new {
def unapply(from : A) : Option[C] = l.unapply(from).flatMap(r.unapply _)
}
斯卡拉克 回复:
Extractors.scala:7: error: Parameter type in structural refinement may not refer to an abstract type defined outside that refinement
def unapply(from : A) : Option[C] = l.unapply(from).flatMap(r.unapply _)
^
Extractors.scala:3: error: Parameter type in structural refinement may not refer to an abstract type defined outside that refinement
def unapply(from : F) : Option[T]
^
two errors found
互联网表示这是由于类型擦除而导致的预期行为。
是否可以改写代码以使其正常工作?