加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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视为相同的类型.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读