尝试根据 @KrzysztofAtłasik 在您之前的建议中添加一个隐式转换question https://stackoverflow.com/a/56915573/5249621.
implicit def conversion[T](c: C[T]): T = c.t
implicit def conversion1[T](t: => T): C[T] = new C(t)
或者使类隐式
implicit class C[T](_t: => T) {
def t: T = _t
}
关于宏,因为您想添加需要的定义宏注释 https://docs.scala-lang.org/overviews/macros/annotations.html而不是定义宏 https://docs.scala-lang.org/overviews/macros/overview.html。 Dotty 没有宏注释,它只有内联宏 https://dotty.epfl.ch/docs/reference/metaprogramming/toc.html就像 Scala 2 def 宏一样。
宏注释也没有帮助。当你定义类时C[T]
不知道是什么T
是(这仅在调用站点才知道),因此不知道要添加哪些方法。
Dotty 也有隐式转换
given [T] as Conversion[T, C[T]] = new C(_)
given [T] as Conversion[C[T], T] = _.t
(目前是given
,以前是implicit
, then implied
, then delegate
,目前为 0.17given
,这可以再次改变)。
它似乎Conversion[(=> T), C[T]]
不允许。