我正在寻找一种方法来查找Scala 3中lambda捕获的值(或它们的类)(用于序列化-类似于Spark)(我不需要Scala 2支持):
val a = "abc"
val f = () => a + "xyz"
serialize(f) // Should detect a / String as captured value
在运行时做这件事有点容易(在f.getClass.getDeclaredFields
上迭代),但我想在编译时做。
我试图在宏中检查lambda的时间,但它被检测为普通scala.Function0
,没有任何有趣的信息。
我想知道我是否可以做一些树检查,但我真的希望避免这样做-我觉得我必须复制编译器内部来捕捉所有的边缘情况。
1条答案
按热度按时间nxagd54h1#
尝试以下macro
用法:
x一个一个一个一个x一个一个二个x