0
私は既存の抽出子を再利用して作成したいと思います。 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
インターネットはそれが原因型消去に行動を期待されていると言います。
正しく動作するようにコードを改訂することはできますか?構造精密化に
そして、どのように私は、新たに定義されたタイプ 'Extractor'に例えば正規表現抽出と一致するだろうか? – ayvango
@ayvango正規表現エクストラクタをペーストできますか? – chengpohi
'val date =" ""(\ d \ d \ d) - (\ d \ d) "" "r" あらかじめ定義されている抽出プログラムがたくさんあります。そして私はそれらを再利用したいと思います。 – ayvango