从 Twirl 模板生成 Scala 源代码
Generate Scala Source from Twirl Template
我知道 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] ....
}
基于 some of the Playframework library sources,看起来他们正在使用自己的模板框架来做类似的事情,尽管它似乎不是自动化的。
所以重申一下这个问题,这种类型的设置可以用 Twirl 实现吗?是否有替代的 sbt 插件可以使这种事情变得更容易?
由于没有编写我自己的 SBT 逻辑,Twirl 似乎无法实现我想要的。
我确实在 sbt-boilerplate 中找到了有用的替代方法。使用该插件,我可以完全实现我想要的。
src/main/boilerplate/Foos.scala.template
object Foos {
[2..22#def foo1[[#A1#]](chain: [#A1# ~ ]) = chain match { case [#a1# ~ ] => ([#a1#]) }
#]
}
扩展到
target/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] ...
}
我知道 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] ....
}
基于 some of the Playframework library sources,看起来他们正在使用自己的模板框架来做类似的事情,尽管它似乎不是自动化的。
所以重申一下这个问题,这种类型的设置可以用 Twirl 实现吗?是否有替代的 sbt 插件可以使这种事情变得更容易?
由于没有编写我自己的 SBT 逻辑,Twirl 似乎无法实现我想要的。
我确实在 sbt-boilerplate 中找到了有用的替代方法。使用该插件,我可以完全实现我想要的。
src/main/boilerplate/Foos.scala.template
object Foos {
[2..22#def foo1[[#A1#]](chain: [#A1# ~ ]) = chain match { case [#a1# ~ ] => ([#a1#]) }
#]
}
扩展到
target/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] ...
}