我想知道Scala是否支持递归宏扩展,例如我正在尝试编写一个镜头库,其中包含一个执行以下操作的宏:
给定
编辑: 在这里我取得了一些不错的进展 然而,我无法想出一种通用方法来创建一个访问器
case class C(d: Int)
case class B(c: C)
case class A(b: B)
val a = A(B(C(10))
val aa = lens(a)(_.b.c.d)(_ + 12)
assert(aa.b.c.d == 22)
给定
lens(a)(_.b.c.d)(f)
,我希望将其转换为 a.copy(b = lens(a.b)(_.c.d)(f))
。编辑: 在这里我取得了一些不错的进展 然而,我无法想出一种通用方法来创建一个访问器
List[TermName]
,例如对于上面的例子,假设我有 List(TermName('b'), TermName('c'), TermName('d'))
,我想生成一个匿名函数 _.b.c.d
,即 (x: A) => x.b.c.d
。 我该怎么做?
基本上,我如何以通用的方式编写这些行?