1

我想创建一个宏来生成辅助构造函数{'s body)。是否可以在不使用宏注释的情况下做到这一点?(即宏天堂插件)

例如:

像这样的东西:

class A(a : String, b : String) { 
  def this(s : List[Any]) = macro fromlist
}

应该相当于这样的东西:

class A(a : String, b : String) {
  def this(s : List[Any]) = this(s.head.toString, s.tail.head.toString)
}

简单地使用“宏”关键字似乎没有帮助。这在普通的 Scala 中是完全不允许的吗?谢谢。

4

1 回答 1

0

问题是,构造函数不是返回新实例的方法,而是初始化已创建实例的方法。(所以你的构造函数定义中的 = 没有意义,父构造函数不返回任何东西)。

下一个问题是,Scala 中的替代构造函数必须调用另一个构造函数作为第一步,你不能调用其他东西,甚至不能调用宏。

但是,您可以调用宏来为此生成参数,例如

this(fromList(s): _*)

但你为什么还要这样做呢?Scala 中很少有多个构造函数。常见的方法是在伴生对象中有一个重载的 apply 方法。你在那里没有任何限制。

于 2016-02-16T12:14:23.167 回答