我在尝试将源AST1转换为目标AST2(在scala中构建DSL编译器)时尝试实现某种多态缓存。因为我希望缓存保留精确的翻译结果类型,所以我选择了无形HMap。它按预期工作,但是在某些时候我需要迭代缓存内容以将其转储到必须记录转换过程的文件中,并且稍后将用于构建从A2到A1的反向转换。通过查看HMap的源代码,我看到有一个潜在的HashMap [Any,Any]我无法访问,因为它不是HMap中的val,我看到HMap实际上是一个多态函数值,这意味着我可以将它应用于HList,其类型对应于HMap键的类型的子集,但我真正想做的是能够折叠多态函数,该函数接受多态(键,值)参数这个HMap以另一种形式检索其内容(例如在标准HashMaps的元组中切片)。有没有办法做到这一点? 最好的。