3
我知道它是可以构建生成的函数里面的类型,但有可能返回超出他们吗?是否可以使用scala宏来构造类型?
我需要产生一个宏解析器[T] - 其中两个解析器和T自外部语法构造,写在用于图书馆用户简化语法描述语言。 T被解析的AST包含相互嵌套的case类。这些案例类应该在外面生成并且可见。
语法:
RootType {
member1: {
member11: TypeB
member12: String
member13: TypeB
}
member2: String
TypeB {
member3: String
}
}
用途:
//Somewhere in my library:
trait ASTNode
def parser: Parser[ASTNode] = macro ... //interpret types from grammar-file
//On the client side:
val input = ... //reads unparsed string from some script-file
val parsed = parse(parser, input)
parsed.member1.member11.member3 //so ASTNode should be replaced with RootType
//case class TypeB and synthetic case class for member1 should be also generated
我正在考虑的解决方案:
- 黑盒宏(如何定义可能产生的外部使用类型功能)
- 解决方法:宏观注解的类型白衣h成员从我的语法生成(我不知道我有多少类型,所以我需要通过注释生成子类,有可能吗?)
- 编写编译器插件或单独的sbt任务或查看macroparadise
- 在运行时生成类是不是一种选择,因为我需要检查类型
已尝试。感谢您输入供应商的链接! – dk14 2014-09-24 05:15:05