지속 할 수있는 방법이 있습니까? (가능합니까?) 동적으로 성장하는 HList
? 내 의사 코드 :동적으로 성장하는 이기종 목록 인 Scala
var llist = 1 :: 2 :: "foo" :: true :: HNil
var list: HList = HNil // here is a wrong type! in fact we dont need HList type
object mapFunc extends Poly1 {
implicit def default[T] = at[T](t => { list = t :: list })
}
llist map mapFunc
분명히이 코드는 작동하지 않습니다. 그래서 ofc 작동하지만 우리는 심지어 list.head
을 입력하여 잘못된 HList
을 입력 할 수도 있습니다. (나는 list
이 타입 매개 변수를 전혀 보관하지 않는다고 인식합니다).
결과 유형 :
shapeless.HList = true :: foo :: 2 :: 1 :: HNil
그래서, 그 잘못이다.
편집
상기 정보 나 참조 충분하지 않다.
그래서 어떤 종류의 변수를 갖고 싶었고 어떤 변수가 어떤 종류 일 수 있습니다. HList
유형이 될 수 있습니다.
class className {
var hlist: HList = _ // it is not correct
}
때때로이 변수에 HList
을 전달합니다.
className.hlist = llist
p.s. @ milessabin 메가 바이트 바로 그게 내 문제에 대한 또 다른 해결책을 찾는 것이 좋습니다.
지속성의 의미를 명확히 할 수 있습니까? 아마도 당신은 DB에 빠졌다고 생각했습니다. HLIST 목록이나 최종 제품/목표가 필요한지 확실하지 않습니다. – wheaties
좋습니다, thx, 편집했습니다. btw, 동적으로 일부 HList를 사용하여 변수에 요소를 추가하는 것을 의미합니다. 예를 들어 일부 요소를 기존 목록 (예 : 비어 있음)에 추가하는 등의 작업은 가능하지만 변수 유형을 다시 정의 할 수 없기 때문에 불가능합니다. 단순한 목록의 경우 우리는 이것을 수행 할 수 있습니다. 이는 하위 유형 지정의 원인이며 실제로 유형에 대한 정보가 느슨합니다. 그래서 고마워! 질문을 제거하는 것이 가능하지는 않습니까? 유용하지 않으며 가장 가능한 대답은 '아니오'입니다. – DaunnC
동적으로 HList를 확장하는 것이 표준 용도입니다. 그들은 추가했고 모든 것을 바로 빌드했습니다. – wheaties