Scalaマクロを使用して、trait内のメソッドの実装者がsuperメソッドを呼び出せるようにすることができます。Scalaマクロを使用すると、メソッド呼び出しの実装者をsuperにできますか?
trait Super {
//some macro magic here: list = super.list ++ child.list
def list: List[String] = List("ein", "zwei", "DIE")
}
class Sub extends Super {
override def list: List[String] = List("4", "5")
}
object Testy extends App {
println(new Sub().list) //List(ein, zwei, DIE, 4, 5)
}
アップデート: - これは本当にマクロでなんとかではありません 以下@Sergeyからのコメントを参照してください。このような場合のために。
創造的なアプローチですが、Superを実装するプログラマーが期待するように、Subは私のユースケースのリスト機能を実装できる必要があります。 – eirirlar
この場合、あなたは運がうまくいかず、恐れがあります。マクロは、すぐにラップするものにのみ影響します。 defマクロはメソッドに渡されるものだけを変換することができ、注釈マクロはそれが注釈するリテラルを変換することができます。マクロがマクロについて知らないコードのルールを強制する方法はありません。 基本的に2つのオプションがあります:ユーザに 'super'を手動で呼び出させるか、注釈マクロを書いて、ユーザがそのサブクラスに注釈を付けるようにします。残念ながら、どちらも省略するのは簡単です。 – Sergey
説明をありがとう。このコメントは、質問に対する答えと同じように聞こえます。あなたが答えとして投稿するなら、私は受け入れるでしょう。私は、クライアントがスーパーに電話して結果を自分の実装に追加する必要があることを文書に書き留めました。 – eirirlar