当使用Scala中SBT工具链,是有可能写会读出该项目的源在编译时产生的Scala代码的一个特殊的部分任务。
在这个任何想法,甚至文章/教程? 我寻找,而类似的模板哈斯克尔的东西。
当使用Scala中SBT工具链,是有可能写会读出该项目的源在编译时产生的Scala代码的一个特殊的部分任务。
在这个任何想法,甚至文章/教程? 我寻找,而类似的模板哈斯克尔的东西。
treehugger.scala是专为代码生成库。
import treehugger.forest._
import definitions._
import treehuggerDSL._
val tree: Tree = Predef_println APPLY LIT("Hello, world!")
println(tree)
println(treeToString(tree))
上述代码打印两行:
Apply(Ident(println),List(Literal(Constant(Hello, world!))))
println("Hello, world!")
treehugger确实产生AST,但不符合scalac的AST。
斯卡拉2.10对宏其中一样复杂的编译时代码生成实验支持。 请参阅这里了解更多详情。
有贾森Zaugg的的一些有趣的例子宏观 git仓库,以及SLICK库,是ScalaQuery SQL DSL实现类型安全的数据库(和收集)查询的演变在LINQ样的方式来表达。
而这个例子中,从expecty断言库:
import org.expecty.Expecty
case class Person(name: String = "Fred", age: Int = 42) {
def say(words: String*) = words.mkString(" ")
}
val person = Person()
val expect = new Expecty()
...
val word1 = "ping"
val word2 = "pong"
expect {
person.say(word1, word2) == "pong pong"
}
产量:
java.lang.AssertionError:
person.say(word1, word2) == "pong pong"
| | | | |
| | ping pong false
| ping pong
Person(Fred,42)
我做了一些研究最近。 差不多有可用的3个选项:
更多详细的活动: http://yefremov.net/blog/scala-code-generation/