私は多くの(ある種の)定型文を書いています。たとえば、次のような特性があるとします。スカラのケースクラスとコンストラクタ
trait Foo {
def x: Int
}
trait Bar {
def y: Boolean
def z: String
}
次に、これらを実装する以上の、またはそれ以下のケースクラスが必要です。
case class MyClass(x: Int, y: Boolean, z: String) extends Foo with Bar
これは迷惑なようですが、今、私の形質がダースdef
のそれぞれを持っていることと名前がx
、y
、およびz
がはるかに長いことを想像しません。ケースクラスを書くことは、これらのすべてをMyClass
の引数として書き直さなければならないことを意味します。
x: Int, y: Boolean, z: String
コンストラクタパーツを、私が拡張した特性に基づいて自動的に生成する方法はありますか?
まあ、defをケースクラスのdefでオーバーライドすることができます。その場合、最初にこれらの値を生成する必要はありません。あなたの特性の実装には、そのdefの実装もありますか?それが最初の場所ではなく、ヴァルではなく、なぜそれを持っているだろうか? – tkachuko
@tkachuko 'def'ではなく' val'をどこでも持っていたとしましょう。どうすればそれが助けになりますか? – Alec
あなたが解決しようとしている文脈に入るのを助けます。何らかの種類のマクロツールが必要です。ここに記載されているライブラリをチェックしましたか?http://stackoverflow.com/questions/22850340/dynamically-creating-case-classes-with-macros? – tkachuko