벡터

2014-11-26 2 views
4

는 볼품 HList (productelement)벡터

val frame = Vector(Vector(1,"a","b",false),Vector(2,"y","z",false),Vector(3,"p","q",true)) 

frame.map(_.hlisted) or frame.map(_.productElements) 

나는 다음과 같은 구조로 변환을 시도하고에 유형 모든의 벡터를 변환하는 방법이 있나요

List[Int :: String :: String :: Boolean :: HNil](1 :: a :: b :: false :: HNil, 2 :: y :: z :: false :: HNil, 3 :: p :: q :: true :: HNil) 

기반 Shapless 마이그레이션 가이드에, 그것은

https://github.com/milessabin/shapeless/wiki/Migration-guide:-shapeless-1.2.4-to-2.0.0#productelements-is-the-new-name-for-hlisted

형식화 된 튜플로 가능

형식이없는 벡터 또는 벡터 -> 입력 된 튜플 -> HList에서 가능합니까? 사전에

감사

답변

7

네, 가능합니다,하지만 당신은 유형을 지정해야하고,이 런타임에 실패 할 수 있습니다 캐스트이기 때문에, 당신은 결과 Option에 싸여거야 :

import shapeless._, syntax.std.traversable._ 

val hlists = frame.map(_.toHList[Int :: String :: String :: Boolean :: HNil]) 

이제 hlists의 유형은 Vector[Option[Int :: String :: String :: Boolean :: HNil]]이며,이 경우 모든 전환이 성공적으로 처리되어 모두 Some으로 묶입니다.

+0

유형을 추론 할 수있는 방법이 있습니까? 요청하는 이유는 은'테이블 선택 * 테이블 선택 B에서 C에서 A, B, C를 선택 즉 내가 선택 기준을 기반으로 HList SQL 쿼리 결과에 대한 SQL 쿼리 결과를 매핑을 시도하고 있다는 점이다 표 ' 이러한 결과는 다를 수 있으며 현재 결과는 으로 표시됩니다. 벡터 (벡터 (x, x, x ..), 벡터 (x, x, x))' – user2780187