我想创建一个生成辅助构造函数{{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中完全不允许这样做吗?感谢。
答案 0 :(得分:0)
问题是,构造函数不是返回新实例的方法,而是初始化已经创建的实例的方法。 (所以构造函数定义中的=没有意义,父构造函数不会返回任何内容。)
接下来的问题是,Scala中的替代构造函数必须调用另一个构造函数作为第一步,你不能调用别的东西,甚至不能调用宏。
然而,你可以调用一个宏来生成这个参数,比如
this(fromList(s): _*)
但你为什么要这样做呢?在Scala中有多个构造函数是非常罕见的。常见的方法是在伴随对象中使用重载的apply方法。你在那里没有任何限制。