大家好。我想弄清楚如何在运行时使用 Scala.js 工具将 Scala 表达式编译为 Javascript。作为示例,这是一个简化的设置。
比如说,我们有一个简单的 DSL,它由Ctx => Boolean
函数和对它们的布尔运算组成,如下所示:
implicit class Simple[Ctx](f: Ctx => Boolean) {
def &&(g: Ctx => Boolean): Ctx => Boolean = ctx => f(ctx) && g(ctx)
def ||(g: Ctx => Boolean): Ctx => Boolean = ctx => f(ctx) || g(ctx)
def unary_!: Ctx => Boolean = ctx => !f(ctx)
}
假设我们有一些“构建块”硬编码、编译成 Javascript 并导出,如下所示:
@ExportJSTopLevel("foo") def foo[Ctx](ctx: Ctx): Boolean = ???
@ExportJSTopLevel("bar") def bar[Ctx](ctx: Ctx): Boolean = ???
// and so on
现在可以从这些构建块中组装简单的布尔表达式,例如:foo && bar
orfoo || !bar
等。
假设一些持久实体是在运行时创建的,它们的主体是这样的表达式。我希望能够将它们编译为 Javascript,作为与上面的构建块具有相同签名的函数,这些构建块调用这些构建块。
我在网上找到了几个关于ScalaJSOptimizer
在 Scala.js 工具中某处调用的神秘类的引用。但是,提供给该类的链接总是被破坏或显示它属于最新版本的“scalajs-tools”工件甚至没有的包。
完成我想做的事情的最佳方法是什么?