【问题标题】:Shapeless: is there a way to get Hlist type from a case class or a tuple无形:有没有办法从案例类或元组中获取 Hlist 类型
【发布时间】:2017-04-28 09:41:20
【问题描述】:

我对无形是完全陌生的。我从列表中创建了一个案例类,如下所示:

val list = Seq(Some(1), Some(1.0), ...)
val y =
  list
    .toHList[Option[Int]::Option[Double]::Option[Int]::Option[Double]::Option[Double]::Option[Double]::Option[Double]::Option[Double]::Option[Double]::Option[Double]::Option[Double]::Option[Double]::Option[Double]::Option[Double]::HNil]

val z = y.get.tupled
val aa = YieldVariables.tupled(z)

它运作良好,但我想知道是否有办法不在toHList[Here] 部分中写入所有这些类型。

所以我想知道list.toHList[find the type yourself]list.getTypesForHlistMyCaseClass.getTypesForHlist 之类的结果是否存在Option[Int]::Option[Double]...

【问题讨论】:

    标签: scala tuples shapeless


    【解决方案1】:

    对于案例类(和元组,这些也是案例类!),使用Generic

    case class A(i: Int, s: String)
    shapeless.Generic[A].to(A(1, "")) // Int :: String :: HNil
    

    这在Seq 上是不可能的。事实上,一旦你调用了构造函数,你传递给该构造函数的元素数量的信息就从类型的角度消失了。 Shapeless 也有 SingletonProductArgs:一个类似于 varargs 语法的宏,它返回 HList 而不是 Seq

    【讨论】:

      猜你喜欢
      • 2020-07-31
      • 2020-02-17
      • 1970-01-01
      • 1970-01-01
      • 2012-12-23
      • 2021-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多