是否可以在Scala中创建没有宏注释的辅助构造函数?

时间:2016-02-16 11:36:54

标签: scala scala-macros scala-macro-paradise

我想创建一个生成辅助构造函数{{4的主体)的宏。是否可以在不使用宏注释的情况下执行此操作? (即宏天堂插件)

例如:

这样的事情:

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中完全不允许这样做吗?感谢。

1 个答案:

答案 0 :(得分:0)

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

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

然而,你可以调用一个宏来生成这个参数,比如

this(fromList(s): _*)

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