私はボイラープレートがたくさんあるプログラムを持っています (残念ながら、Scala のメカニズムでも削減できません)。しかし、マクロを使用して複雑なトップレベル クラスを生成する方法があれば、定型文はすべてなくなります。例えば:
package org.smth
generate(params)
// becomes
class A { ... }
object B { ... }
case class C { ... }
Scala 2.10 マクロで可能ですか?
私はボイラープレートがたくさんあるプログラムを持っています (残念ながら、Scala のメカニズムでも削減できません)。しかし、マクロを使用して複雑なトップレベル クラスを生成する方法があれば、定型文はすべてなくなります。例えば:
package org.smth
generate(params)
// becomes
class A { ... }
object B { ... }
case class C { ... }
Scala 2.10 マクロで可能ですか?
要するに:いいえ。
マクロ型(つまり、メソッドの代わりに型を生成するマクロ) が計画されていますが、それらはまだ実装はおろか、設計も指定もされておらず、2.10 にはありません。
また、1 回のマクロ呼び出しで生成できる型は 1 つだけです。ただし、型 (具体的にはobject
s) はネストできるため、これは制限ではありませんobject
。必要なすべてのクラスを含む単一のトップレベルを生成するだけです。これとあなたのコードの違いは、基本的に 1 つの追加import
ステートメントです。
package org.smth
type O = Generate(params)
// becomes
object O {
class A { ... }
object B { ... }
case class C { ... }
}
// which means you need an additional
import O._
彼らは、クラスでいっぱいのパッケージ全体を生成できるマクロについて考えましたが、 s は s のスーパーセットであり、型マクロは不要な s を生成できることpackage
に気付きました。object
package
object