Scala 我可以使用宏动态添加类字段吗?

Scala 我可以使用宏动态添加类字段吗?,scala,scala-macros,Scala,Scala Macros,我是Scala宏的新手,如果这是一个明显的问题,那么很抱歉 在我深入研究之前,我想知道下面是否可能 假设我有一个名为DynamicProperties 是否可以基于这样的内容向类中添加成员 val x: DynamicProperties = ... x.addProperty("foo", 1) x.addProperty("bar", true) x.addProperty("baz", "yep") 有没有把它翻译成一个或多或少像这样的类 class SomeName extends

我是Scala宏的新手,如果这是一个明显的问题,那么很抱歉

在我深入研究之前,我想知道下面是否可能

假设我有一个名为
DynamicProperties

是否可以基于这样的内容向类中添加成员

val x: DynamicProperties = ...
x.addProperty("foo", 1) 
x.addProperty("bar", true)
x.addProperty("baz", "yep")
有没有把它翻译成一个或多或少像这样的类

class SomeName extends DynamicProperties { 
   val foo: Int = 1
   val bar: Boolean = true
   val baz: String: yep
}

我想这可以通过反射来实现,但我希望使用反射的人在键入
x.
时自动完成,这将符合他们之前使用
addProperty
方法所做的操作。使用Scala marcos可以做到这一点吗?我想尝试实现它,但最好知道它是否走上了死胡同。

我认为您需要宏注释来实现它,而标准Scala中没有宏注释。他们生活在“宏观天堂”;看见但是我是一个Scala宏noob,所以有人应该确认一下。使用
动态
特性不是更容易吗?是的,这就是我现在实际使用的,但我希望它在自动完成中使用。此外,在dynamic中,如果API的用户在x上指定了缺少的属性,则不会出现编译时错误。目前,不可能对宏执行所需的操作。宏是关于代码的局部转换,因此即使您将
addProperty
声明为宏,也无法更改x的定义(您可以读取它,但不能写入它)。但是,您可以让
addProperty
返回另一个对象,该对象包含输入的所有属性和附加属性。