でオーバーライドされたメンバ変数のタイプを考え出す私はこのようなタイプの階層構造を持っている:Scalaの
trait Description {
}
trait DescriptionProvider {
val description: Description
}
object Sample extends DescriptionProvider {
object description extends Description {
val name = "foo"
}
}
は今、私は私にDescriptionProvider
のいずれかのサブタイプのための具体的な値a.description
を与える関数f
、探しています、それを含むタイプです。
など。 f(Sample).name
はコンパイルしてfoo
と評価する必要があります。
明白なアクセス方法はもちろん
def obvious[T <: DescriptionProvider](x: T) = x.description obvious(Sample).name // doesn't compile of course, as foo returns only Description.
を動作することはできません(すでに存在し、巨大である)オブジェクト階層の大幅な変更を行うことなく、このような関数fを設計する方法を任意のトリックはあります?
私は既に何らかの方法で動作するマクロを使用しようとしましたが、IntelliJはそれを好まない(上記の例では.name
が赤で表示されます)。
私はScala 2.10を使用していますが、今は変更できません。
ありがとう、これは動作します! (IntelliJもそれを受け入れます) – nob