You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala宏对样例类的类型参数自省泛型映射问题

Scala 2 宏泛型样例类参数映射解决方案
  • 问题本质:你从样例类声明处拿到的typeSignature里的泛型是原始定义的形参(即定义Foo时声明的Bar),而你持有的tpe是实际传入的参数化类型,二者只需要做形参到实参的绑定替换即可解决。
  • 具体实现步骤:
    1. 提取泛型形参列表:从实际类型的构造器中获取原始定义的所有泛型形参符号,顺序和定义顺序完全一致
      val typeParams = tpe.typeConstructor.typeParams
      
    2. 提取泛型实参列表:从实际参数化类型中提取传入的所有真实泛型参数,顺序和形参列表一一对应
      val typeArgs = tpe.typeArgs
      
    3. 替换签名中的形参:使用Scala 2 宏原生提供的substituteTypes方法,直接完成签名中所有形参到实参的递归替换
      // originalSig 是你拿到的包含泛型形参Bar的原始typeSignature
      val resolvedSig = originalSig.substituteTypes(typeParams, typeArgs)
      
  • 验证:替换完成后的resolvedSig中所有原本的泛型形参Bar会被替换为实际传入的Baz,符合预期。

该方法对样例类字段类型、方法返回值/参数类型等所有引用类泛型形参的类型场景均适用,无需手动递归处理嵌套的泛型引用。

内容的提问来源于stack exchange,提问作者darkfrog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 21:18:01