Scala 为什么deriveHCons的签名声明“HK<;”Symbol`当Symbol是最终类时
以下是Shapeless的Scala 为什么deriveHCons的签名声明“HK<;”Symbol`当Symbol是最终类时,scala,generics,subclassing,generic-programming,shapeless,Scala,Generics,Subclassing,Generic Programming,Shapeless,以下是Shapeless的LabelledProductTypeClassCompanion中的deriveHCons签名: implicit def deriveHCons[HK <: Symbol, HV, TKV <: HList] (implicit ch: Lazy[C[HV]], key: Witness.Aux[HK], ct: Lazy[Wrap[TKV] { type V <: HList }] ): Wra
LabelledProductTypeClassCompanion
中的deriveHCons
签名:
implicit def deriveHCons[HK <: Symbol, HV, TKV <: HList]
(implicit
ch: Lazy[C[HV]],
key: Witness.Aux[HK],
ct: Lazy[Wrap[TKV] { type V <: HList }]
): Wrap.Aux[FieldType[HK, HV] :: TKV, HV :: ct.value.V] = ...
implicit def deriveHCons[HK我将解释为什么这适用于Int
,但它实际上适用于Symbol
Int
是final right吗?下面是它的一个实例:
val n = 2
但是我们实际上可以给n
一个比这个更精确的类型。如何?使用:
现在n
有typeWitness.`2`.T
,又称2.type
,或者只是type2
2
是它的唯一居住者,例如3:Witness.`2`.T
不会编译。我们有Witness.`2`.T……你知道无形状的
…基于类型的通用编程enabl正在处理Scala通常不可能完成的事情。-@SarveshKumarSingh Thx作为指针!仍然不确定我是否完全理解这一切是如何工作的,但我有一个更好理解的起点。代码段需要导入syntax.singleton.\u
才能编译。
val n: Witness.`2`.T = 2
val s = Symbol("s")
val refined: Witness.`'s`.T = Symbol("s")