我可以使用dotty
宏分段来解析字符串、生成代码并在运行时运行它吗?
我正在考虑构建一种可以以不同方式使用的模式和 Web 查询语言:通过 REST 传递,或者在编译时静态构造和验证。这将需要两种操作模式(运行时/编译时)并能够在两种模式下重用部分宏代码。
从我对dotty lang的第一次分析来看,它看起来是可行的;但是,我还没有看到任何使用函数签名解析字符串的方法,如String => Expr[?]
. 这可能吗?
此外,这些宏是否有能力改变 scala 代码语义?例如,我想做这样的事情,直接在 scala 代码中:
val preparedQuery = db.query User | name == "Alex" | page 1 limit 10 {
(asc 1) name,
address { country, city }
roles { * }
}
我也应该能够使用字符串执行相同的查询:
val preparedQuery = db.parseQuery(" <the same query> ")