我有一个包含大量样板的程序(遗憾的是,即使通过 Scala 机制也无法简化)。但是,如果有一种方法可以使用宏生成复杂的顶级类,那么所有这些样板都会消失。例如:
package org.smth
generate(params)
// becomes
class A { ... }
object B { ... }
case class C { ... }
Scala 2.10 宏可以实现吗?
最佳答案
简而言之:没有。
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
s 是 package
的超集s 和 type 宏可以生成 object
s 那将是不必要的。
关于scala - 是否可以在 Scala 2.10 中通过一次宏调用生成多个顶级类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12295971/