scala – 基于类的类型参数的Poly1方法中的HList映射
发布时间:2020-12-16 18:18:28 所属栏目:安全 来源:网络整理
导读:我有类,用HList和其他类型参数化.如何在其中一个方法中使用HList上的map? 编译此代码会抛出java.lang.AssertionError: class Test[L : HList,P](l: L,p: P) { type Cont[T] = (P,T) object generator extends (Id ~ Cont) { def apply[T](t: T) = p - t }
我有类,用HList和其他类型参数化.如何在其中一个方法中使用HList上的map?
编译此代码会抛出java.lang.AssertionError: class Test[L <: HList,P](l: L,p: P) { type Cont[T] = (P,T) object generator extends (Id ~> Cont) { def apply[T](t: T) = p -> t } def test(implicit m: Mapper[generator.type,L]) = { l map generator } } new Test(1 :: HNil,'a).test // java.lang.AssertionError 我的目标是这样的结果: type Cont[T] = (Symbol,T) val p = 'a object generator extends (Id ~> Cont) { def apply[T](t: T) = p -> t } scala> (1 :: 'b' :: HNil) map generator res0: shapeless.::[(Symbol,Int),shapeless.::[(Symbol,Char),shapeless.HNil]] = ('a,1) :: ('a,b) :: HNil 解决方法
这是Scala编译器中的一个错误(2.9.2和2.10.0-RC1).
作为一种解决方法,如果您将Test实例的创建和测试方法的调用分成两个表达式,那么它将按预期工作, scala> val t = new Test(1 :: HNil,'a) t: Test[shapeless.::[Int,shapeless.HNil],Symbol] = Test@4b153b34 scala> t.test res0: shapeless.::[(Symbol,shapeless.HNil] = ('a,1) :: HNil (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |