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