scala – 高级类型成员声明之间的差异
发布时间:2020-12-16 09:55:19 所属栏目:安全 来源:网络整理
导读:看看无形图书馆的来源,我注意到了不同的高级会员类型声明,并想知道它是否在使用上有一些具体的区别.例如,通用特征 here: trait Generic1[F[_],FR[_[_]]] { type R[t] // ...}trait IsHCons1[L[_],FH[_[_]],FT[_[_]]] { type H[_] // ...} 声明了一个类型成
看看无形图书馆的来源,我注意到了不同的高级会员类型声明,并想知道它是否在使用上有一些具体的区别.例如,通用特征
here:
trait Generic1[F[_],FR[_[_]]] { type R[t] // ... } trait IsHCons1[L[_],FH[_[_]],FT[_[_]]] { type H[_] // ... } 声明了一个类型成员,它具有类型构造函数的通用语法(即H [_]),而Generic1特性具有R [t].虽然辅助类型别名以类似的方式定义: object Generic1 { type Aux[F[_],FR[_[_]],R0[_]] = Generic1[F,FR] { type R[t] = R0[t] } // ... } object IsHCons1 { type Aux[L[_],FT[_[_]],H0[_],T0[_] <: HList] = IsHCons1[L,FH,FT] { type H[t] = H0[t] ; type T[t] = T0[t] } // ... } 所以我想知道R [t]和H [_]是否有任何区别? 解决方法
没有区别,因为t只是未绑定的.您可以在REPL中轻松验证:
scala> type T1 = { type R[t] } defined type alias T1 scala> type T2 = { type R[_] } defined type alias T2 scala> implicitly[T1 =:= T2] res0: =:=[T1,T2] = <function1> 最后一行编译的事实证明编译器将T1和T2视为相同的类型. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读