2

play-twirlは、実行時に呼び出すことができるテンプレート関数を含む Scala ソースを生成するために使用されることを知っています。

play-twirl で任意の Scala ソースファイルを生成する方法はありますか?

たとえば、
次のようなテンプレートを作成して、面倒なメソッド シグネチャの作成を自動化したいと考えています。

src/main/twirl/Foos.scala.scala

object Foos {
  @for(i <- 2 to 22){
  def foo@i[@(...)](chain: @(...)) = @(...)
  }
}

そして、SBTのようなソースファイルを生成します

src_managed/main/scala/Foos.scala

object Foos {
  def foo2[A1, A2](chain: A1 ~ A2) = chain match { case a1 ~ a2 => (a1, a2) }
  def foo3[A1, A2, A3](chain: A1 ~ A2 ~ A3) = ...
  ....
  def foo22[A1, ..., A22] ....
}

いくつかの Playframework ライブラリ ソースに基づくと、自動化されていないように見えますが、独自のテンプレート フレームワークを使用して同様のことを行っているようです。

繰り返しになりますが、このような設定は Twirl で可能ですか? この種のことを簡単にする代替の sbt プラグインはありますか?

4

1 に答える 1

0

独自の SBT ロジックを作成する以外に、Twirl は私が探していたものを実行できないようです。

sbt-boilerplateで便利な代替手段を見つけました。そのプラグインを使用すると、探していたものを正確に実現できます。

src/main/boilerplate/Foos.scala.template

object Foos {
  [2..22#def foo1[[#A1#]](chain: [#A1# ~ ]) = chain match { case [#a1# ~ ] => ([#a1#]) }
  #]
}

に展開します

ターゲット/scala-2.xx/src_managed/main/Foos.scala

object Foos {
  def foo2[A1, A2](chain: A1 ~ A2) = chain match { case a1 ~ a2 => (a1, a2) }
  def foo3[A1, A2, A3] ...
  ...
  def foo22[A1, ..., A22] ...
}
于 2015-11-06T22:23:47.833 に答える