在scala 2.10中,通过一次宏调用可以生成几个顶级类吗?

在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宏是否可以使用?简言之:否 (即生成类型而不是方法的宏)是计划好的,但它们既没有设计也没有指定,更不用说实现了,而

我有一个包含大量样板文件的程序(遗憾的是,即使是Scala机制也无法简化)。但是,如果有一种方法可以用宏生成复杂的顶级类,那么所有这些样板文件都将消失。例如:

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)的返回类型是什么?