4

我想为接受 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 宏来实现这一点?或者,这可以通过其他方式实现吗?

4

1 回答 1

3

您尝试做的事情很容易通过隐式转换实现,因此您并不需要宏:

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

使用隐式转换意味着,只要编译器注意到类型不匹配,它就会尝试隐式转换应用隐式函数的值。

于 2019-07-06T15:47:32.753 回答