我有一个包含大量样板的程序(遗憾的是,即使是 Scala 机制也无法简化)。但是,如果有一种方法可以使用宏生成复杂的顶级类,那么所有样板文件都会消失。例如:
package org.smth
generate(params)
// becomes
class A { ... }
object B { ... }
case class C { ... }
Scala 2.10 宏可以实现吗?
我有一个包含大量样板的程序(遗憾的是,即使是 Scala 机制也无法简化)。但是,如果有一种方法可以使用宏生成复杂的顶级类,那么所有样板文件都会消失。例如:
package org.smth
generate(params)
// becomes
class A { ... }
object B { ... }
case class C { ... }
Scala 2.10 宏可以实现吗?
简而言之:没有。
宏类型(即生成类型而不是方法的宏)是计划好的,但它们没有被设计或指定,更不用说实现了,而且它们不会用于 2.10。
此外,单个宏调用只能生成一个类型。然而,由于类型(特别是s)可以嵌套,这不是限制:您可以只生成一个包含所有您需要的类object
的顶级。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 是 s 的超集,package
并且类型宏可以生成object
不必要的 s。