使用 Scala 宏创建伪赋值

Creating pseudo-assignement using Scala macro

我正在尝试对此进行转换:

@Property("test")  
private var testOpt: Option[String] = Option.empty

进入

private var testOpt: Option[String] = Option.empty

def test: Option[String] = testOpt
def test_=(value: Option[String]) = testOpt = test

使用此代码:https://hasteb.in/rawulipe.scala

一切正常,除了使用 _= 后缀时,得到

value test_= is not a member of <the class of the testOpt variable>

手动添加此方法时工作正常。有什么想法吗?

替换

val setter = TermName(s"${defName}_=")

val setter = TermName(s"${defName}_=").encodedName.toTermName

val setter = TermName(s"${defName}_$$eq")

用法:

@Property("test")
private var testOpt: Option[String] = Option.empty
  
//scalac: {
//  private var testOpt: Option[String] = Option.empty;
//  def test: Option[String] = testOpt;
//  def test_$eq(value: Option[String]): Unit = testOpt = value;
//  ()
//}

test = Some("a") // compiles