Существует очень мало читаемой документации о HLists, и ответы, которые я могу найти на SO, приходят из космоса для скромного новичка в Scala.
Я столкнулся с HLlists, потому что 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??
Может кто-нибудь объяснить, как я могу извлечь определенное значение из этого динозавра?
dinosaur
.... Кажется, вы в ужасе отHList
. - person sarveshseri   schedule 13.01.2017