从旋转模板

时间:2015-11-06 04:03:51

标签: scala sbt twirl

我知道play-twirl用于生成包含可在运行时调用的模板函数的Scala源。

有没有办法用play-twirl生成任意Scala源文件?

例如
我想通过创建像

这样的模板来自动创建一些繁琐的方法签名

的src /主/捻/ Foos.scala.scala

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

有一个由SBT生成的源文件,如

src_managed /主/阶/ 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] ....
}

基于some of the Playframework library sources,看起来他们正在使用他们自己的模板框架来做类似的事情,虽然看起来并不是自动化的。

所以重申这个问题,这种类型的设置是否适用于Twirl?是否有一个替代的sbt插件可以使这种事情变得更容易?

1 个答案:

答案 0 :(得分:0)

如果没有编写我自己的SBT逻辑,Twirl似乎无法完成我想要的工作。

我确实在sbt-boilerplate中找到了有用的替代方案。使用该插件,我可以完全满足我的需求。

的src /主/样板/ Foos.scala.template

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

扩展到

目标/阶-2.xx的/ src_managed /主/ 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] ...
}