使用Scala宏创建伪分配

问题描述

我正在尝试改变它:

@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

scala AST Select node can't find members inherited from parent

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...