我想为接受 1 类型参数的类生成函数
case class C[T] (t: T)
取决于
T
类型参数。我想生成的函数是由
T
上可用的函数派生的。 .我真正想要的是使
T
的所有功能都可用。 , 也可用于 C
.以
C[Int]
为例, 我希望能够调用 C
Int
上可用的任何功能并将函数调用发送到 Int
包含在 C
.val c1 = new C(1)
assert(c1 + 1 == 2)
如何通过使用 Scala 2 或 dotty 宏来实现这一点?
或者,这可以通过其他方式实现吗?
最佳答案
使用 implicit conversions 可以轻松实现您想要做的事情,所以你真的不需要宏:
case class C[T] (t: T)
object C { //we define implicit conversion in companion object
implicit def conversion[T](c: C[T]): T = c.t
}
import scala.language.implicitConversions
import C._
val c1 = C(1)
assert(c1 + 1 == 2) //ok
val c2 = C(false)
assert(!c2 && true) //ok
使用 隐式转换 意味着,只要编译器注意到类型不匹配,它就会尝试应用隐式函数隐式转换值。
关于scala - 在宏扩展时生成函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56914218/