假设我有一个
class A(msg: String)(using ctx1: Int, ctx2: Long)
我想告诉你,它有两个隐式参数使用反射。
我试过类似的方法
val m = runtimeMirror(getClass.getClassLoader)
println(m.classSymbol(getClass).primaryConstructor.info.paramLists)
但这仅识别一个参数列表。
还尝试了isImplicit
println(m.classSymbol(getClass).primaryConstructor.info.paramLists.head.map(_.asTerm.isImplicit))
它没有工作,返回所有false。
我使用Scala 3.3
1条答案
按热度按时间mzaanser1#
这是用2.13和3编译的代码之间的区别。
当你在2.13中编译这段代码时:
你会得到这样的结果:
请参见Scastie。
在Scala 3中:
打印:
参见Scastie。
我相信原因是:
-Ytasty-reader
标志)因此,当你编译Scala 3代码时,添加一个对Scala 2.13库的依赖,编译器可以读取和使用这个库,但是库不能读取Scala 3提供的额外的字节码属性/Tasty。
因此,您看到的是JVM所看到的,即未curry的方法。