【发布时间】:2016-12-30 07:36:40
【问题描述】:
我想重用现有的提取器并组合它们。 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 _)
}
scalac 回复:
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
Internet 表示这是由于类型擦除导致的预期行为。
是否可以改写代码以使其正常工作?
【问题讨论】:
标签: scala type-parameter extractor structural-typing