0
我想重用现有的提取器并撰写它们。 完美匹配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
互联网说,这是正常现象,因为类型擦除。
是否有可能改写代码,以便它能正常工作?在结构细化
而且我怎么可能例如正则表达式提取匹配新定义的类型'Extractor'? – ayvango
@ayvango你可以粘贴你的正则表达式提取器吗? – chengpohi
'val date =“”“(\ d \ d \ d \ d) - (\ d \ d) - (\ d \ d)”“”r' 还有其他一些预定义的提取器。我想重复使用它们。 – ayvango