我有一个带有大量样板的程序(遗憾的是,即使是Scala机制也不能简化)。但是如果有一种方法可以用宏生成复杂的顶级类,那么所有的样板都将消失。例如:
package org.smth
generate(params)
// becomes
class A { ... }
object B { ... }
case class C { ... }
Scala 2.10宏是否可以实现?
答案 0 :(得分:7)
简而言之:不。
Macro types(即生成类型而不是方法的宏)是计划好的,但它们不是设计也不是指定,更不用说实现了,它们不适用于2.10。
此外,单个宏调用只能生成单个类型。但是,由于类型(具体而言,object
s)可以嵌套,因此这不是限制:您只需生成包含所需所有类的单个顶级object
。这与您的代码之间的区别基本上是一个额外的import
语句:
package org.smth
type O = Generate(params)
// becomes
object O {
class A { ... }
object B { ... }
case class C { ... }
}
// which means you need an additional
import O._
他们考虑了可以生成完整类的完整包的package
宏,但意识到由于object
是package
的超集,并且类型宏可以生成{{1}这不是必要的。