8

私はボイラープレートがたくさんあるプログラムを持っています (残念ながら、Scala のメカニズムでも削減できません)。しかし、マクロを使用して複雑なトップレベル クラスを生成する方法があれば、定型文はすべてなくなります。例えば:

package org.smth

generate(params)

// becomes

class A { ... }
object B { ... }
case class C { ... }

Scala 2.10 マクロで可能ですか?

4

1 に答える 1

7

要するに:いいえ。

マクロ型(つまり、メソッドの代わりに型を生成するマクロ) が計画されていますが、それらはまだ実装はおろか、設計も指定もされておらず、2.10 にはありません。

また、1 回のマクロ呼び出しで生成できる型は 1 つだけです。ただし、型 (具体的にはobjects) はネストできるため、これは制限ではありません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に気付きました。objectpackageobject

于 2012-09-06T10:09:18.423 に答える