scala - 在 Scala 中用 <: 和 <:< 表示子类型关系
问题描述
通常,我使用 <: 来表示像 A <: B 这样的子类型关系,既可以作为类型参数的一部分,也可以作为类型成员。在浏览一些东西时,我遇到了这个“<:<”表示。在 Predef.scala 中找到它,令人惊讶的是,它被定义为一个抽象类。医生说:
A <:< B
见证人的一个实例,它A
是 的子类型B
。要求类型的隐式参数对A <:< B
广义约束进行编码A <: B
。
鉴于两者都代表相同的“子类型”关系(AFAIK),有人可以澄清一下两者之间的区别究竟是什么。另外,请建议它们的正确用法(我的意思是, <:< 优于 <:) ?
解决方案
[A <: B]
声明A
具有已知属性/限制的类型参数 :它必须是类型B
(现有类型)或其子类型。
class A // A and B are unrelated
class B
// these both compile
def f1[A <: B]() = ??? // A is the type parameter, not a reference to class A
def f2[B <: A]() = ??? // B is the type parameter, not a reference to class B
[A <:< B]
用于测试现有类型。
class B
class A extends B
// A and B must already exist and have this relationship or this won't compile
implicitly[A <:< B]
推荐阅读
- google-cloud-platform - Google Cloud Build 未能检索到 Github 存储库
- authentication - 如何配置 axios 以使用 auth 请求 WebAPI?
- python - 如何用数据框列中的字符串列表替换单个字符串
- vue.js - Vuetify数据表如何使用主题颜色设置全选列的背景颜色?
- javascript - 如何替换javascript中所有出现的字符串?
- javascript - 关于英国政府新的外出就餐帮助计划网站的问题
- linux - 如何在 windows 和 linux 上为 react-native 项目运行 detox?
- c# - 如何在 CIL (MSIL)“调用实例 void valuetype [..type]”中返回或保存值?(通用中间语言)
- javascript - 表单中的下拉列表在使用节点 js 提交后清除值
- r - 检查变量并根据组归属对其进行分组