trait A {
type C
val Extract: {
def unapply(c: C): Option[Int]
}
}
エラーは以下の通りです:
error: Parameter type in structural refinement may not refer to an abstract type defined outside that refinement
私は上記を書きたいです私はパターンAで使用することができるように、特性Aのユーザーにオブジェクトまたはunapply
メソッドを持つ値を定義させます。
"Parameter type in structural refinement may not refer to an abstract type defined outside that refinement"とScala: "Parameter type in structural refinement may not refer to an abstract type defined outside that refinement"(以下を参照)のおかげで2つの回避策が見つかりましたが、最初のものは特性の継承を強制します。これは外部ライブラリにリンクしようとすると実行できません。 2番目の方法では、より多くのメソッドを追加するためにExtract
をオーバーライドする可能性が失われます。
回避策
trait A {
type C
trait Extractable {
def unapply(c: C): Option[Int]
}
val Extract: Extractable
}
trait A {
type C
def extract(c: C): Option[Int]
object Extract {
def unapply(c: C): Option[Int] = extract(c)
}
}
私は、ユーザーが彼が望んでいるExtract
方法を実装することができないという考えを表現することができます(構造タイプ以外多分他の)どのような方法があり、それは方法のunapply
を持って提供要求された署名?
を理由があります私は別のものにミックスする必要があるいくつかの 'A'のようなものです。また、形質には暗黙的なパラメーターやパラメーターがない場合もあります。 –
編集したバージョンのヘルプはありますか?これはまだ回避策ですが、これにはかなり柔軟性があるはずです。 – slouc
@MikaëlMayerこれは解決されましたか? – slouc