scala - 我可以在运行时和编译时两种模式下重用宏代码吗?
问题描述
我可以使用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> ")
解决方案
推荐阅读
- mean - 计算不包括国家本身的平均 wrt 区域
- chat - 如何在 freeswitch 中为 linphone 配置简单的 mod_sms?
- json - 如何从 JSON 中生成第二个屏幕的列表?
- c - 使用逗号作为多个数字输入的分隔符时出现c语言错误
- java - Android Studio 数据库列必须 > 0 错误
- c++ - 如何让 NSOpenPanel 在 Objective-C 中接受键盘和鼠标事件?
- c++ - Boost 多边形联合结果在 windows 和 linux 之间是不同的
- visual-studio-code - 带有热键的最小 vscode
- node.js - 拆分 GraphQL Javascript Schema
- ruby-on-rails - 一种显示公共资产列表的方法