在scala 2.10中,通过一次宏调用可以生成几个顶级类吗?
我有一个包含大量样板文件的程序(遗憾的是,即使是Scala机制也无法简化)。但是,如果有一种方法可以用宏生成复杂的顶级类,那么所有这些样板文件都将消失。例如:在scala 2.10中,通过一次宏调用可以生成几个顶级类吗?,scala,macros,scala-2.10,Scala,Macros,Scala 2.10,我有一个包含大量样板文件的程序(遗憾的是,即使是Scala机制也无法简化)。但是,如果有一种方法可以用宏生成复杂的顶级类,那么所有这些样板文件都将消失。例如: package org.smth generate(params) // becomes class A { ... } object B { ... } case class C { ... } Scala 2.10宏是否可以使用?简言之:否 (即生成类型而不是方法的宏)是计划好的,但它们既没有设计也没有指定,更不用说实现了,而
package org.smth
generate(params)
// becomes
class A { ... }
object B { ... }
case class C { ... }
Scala 2.10宏是否可以使用?简言之:否
(即生成类型而不是方法的宏)是计划好的,但它们既没有设计也没有指定,更不用说实现了,而且它们在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的超集,类型宏可以生成不必要的object
s,那么现在可以在方法宏中生成内部类吗?像val a={class a{…};new a smth}
?是的,这是可能的,但是本地类不需要在全局符号表中注册,所以很简单。Generate(params)的返回类型是什么?