scala 宏 - 如何将 Array[TermName] 扩展到 HList 串联

scala macro - how to expand an Array[TermName] to HList concatenation

假设我有一个案例class

case class(id: Option[Long], name: String, gender: String)

然后我通过编译时反射得到了字段名

val names = ... // Array(TermName(id), TermName(name), TermName("gender"))

如何将这些名称转换为 id :: name :: gender :: HNil(类型为 Option[Long] :: String :: String :: HNil]

也就是说我正在寻找类似 q"..$name" 的东西,但用 :: 而不是 ,

扩展名称

好像可以这样

   def hlistConcat[T: Liftable ](elems: Iterable[T]) = {
      val HNil = q"HNil": Tree
      elems.toList.reverse.foldLeft(HNil) { (list, c) =>
        q"$c :: $list"
      }
    }