我想为接受 1 类型参数的类生成函数,该参数包含按名称值。
class C[T](_t: => T) {
def t: T = _t
}
我想生成的函数是由T
.
我真正想要的是获得所有可用的功能T
,以编程方式更改它们的合同和实现,并使它们可用于C
.
通过更改他们的合同,我的意思是更改他们的签名以便他们 return
C[R]
,其中R
代表原始函数的返回类型。C
通过更改它们的实现,我的意思是在返回之前将结果包装在里面。
例如。
def +(that: Int): Int =
this + that
C[Int]
将成为可用
def +(that: Int): C[Int] =
C(this.t + that)
这样做是为了消除必须包装在C
计算中以使其不被评估的样板。
例如。
val c1 = new C(1)
val c2: C[Int] = C(c1.t + 1)
c2.t == 2
也可以表示为
val c2: C[Int] = c1 + 1
c2.t == 2
如何通过使用 Scala 2 或 dotty 宏来实现这一点?或者,这可以通过其他方式实现吗?