scala - 如何从 Scala HList 中读取元素?

标签 scala slick slick-3.0 hlist

关于 HLists 的可读文档很少,我可以在 SO 上找到的答案来自外太空,供一个谦虚的 Scala 初学者使用。

我遇到 HLists 是因为 Slick 可以自动生成一些来表示数据库行。他们是 slick.collection.heterogeneous.HList (不是无形的')。
例子:

type MyRow = HCons[Int,HCons[String,HCons[Option[String],HCons[Int,HCons[String,HCons[Int,HCons[Int,HCons[Option[Int],HCons[Option[Float],HCons[Option[Float],HCons[Option[String],HCons[Option[String],HCons[Boolean,HCons[Option[String],HCons[Option[String],HCons[Option[String],HCons[Option[String],HCons[Option[String],HCons[Option[Int],HCons[Option[Float],HCons[Option[Float],HCons[Option[Float],HCons[Option[String],HCons[Option[String],HNil]]]]]]]]]]]]]]]]]]]]]]]]
def MyRow(a, b, c, ...): MyRow = a :: b :: c :: ... :: HNil

现在给定这些行之一,我需要读取一个元素,如果可能的话输入。我就是不能那样做。我试过
row(4)  // error
row._4  // error
row.toList  // elements are inferred as Any
row match { case a :: b :: c :: x :: rest => x }  // "Pattern type is incompatible. Expected MyRow."
row match { case MyRow(_,_,_,_,_,x,...) => x }  // is not a case class like other rows
row match { HCons[Int,HCons[String,HCons[Option[String],HCons[Int,HCons[String, x]]]]] => x.head }  // error
row.tail.tail.tail.tail.head  // well, is that really the way??

有人可以解释一下我如何从那只恐龙中提取特定值吗?

最佳答案

我希望你的 row(0)查找工作基于 HList API doc for apply .这是我使用 Slick 3.1.1 尝试的示例:

scala> import slick.collection.heterogeneous._
import slick.collection.heterogeneous._

scala> import slick.collection.heterogeneous.syntax._
import slick.collection.heterogeneous.syntax._

scala> type MyRow = Int :: String :: HNil
defined type alias MyRow

scala> val row: MyRow = 1 :: "a" :: HNil
row: MyRow = 1 :: a :: HNil

scala> row(0) + 99
res1: Int = 100

scala> val a: String = row(1)
a: String = a

关于scala - 如何从 Scala HList 中读取元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41637704/

相关文章:

mysql - 在 Scala 中,当进行巧妙的 sortBy 时,如何让它进行区分大小写的排序

postgresql - Typesafe Slick 和 PostgreSQL 8.4 : troubles with table while working in PostgreSQL interface

scala - 使用 Slick 创建单列表

mysql - 通讯链路故障; Heroku 上的 Spray.io 以及 ClearDB 附加组件

scala - 将 build.sbt 与 project/Build.scala 和聚合混合

scala - JavaFX/ScalaFX 和剪贴板 : Cannot copy files?

postgresql - 由于含糊不清的隐式,无法将 MappedProjection 转换为 ProvenShape

scala - 尽管失败,如何进行执行Future序列?

oracle11g - 将 java.sql.Connection 转换为 oracle.jdbc.OracleConnection 会导致编译错误

mysql - 如何使用 MySQL 获取最后插入的 id