scala宏 - 如何将Array [TermName]扩展为HList并置

时间:2015-04-24 14:56:26

标签: scala scala-macros

假设我有一个案例类

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]

也就是说我在quasiquote中寻找q"..$name"之类的内容,但使用::而不是,来扩展名称

1 个答案:

答案 0 :(得分:0)

似乎可以这样做

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