为什么这段 Scala 代码中需要向上转换?

2024-01-24

这编译:

import scala.collection._

trait Foo[A, +This <: SortedSet[A] with SortedSetLike[A,This]]
extends SortedSetLike[A, This] { this: This =>

  def bar: This = (this: SortedSetLike[A,This]).empty

}

但如果删除了向上转换,则无法编译:

import scala.collection._

trait Foo[A, +This <: SortedSet[A] with SortedSetLike[A,This]]
extends SortedSetLike[A, This] { this: This =>

  def bar: This = this.empty

}

为什么?来自extends条款我们知道Foo is a SortedSetLike[A, This],所以向上转换当然是有效的 - 但这是否表明编译器允许发生冲突的继承?


The 类似排序集特质继承了empty方法来自SetLike.

/** The empty set of the same type as this set
* @return  an empty set of type `This`.
*/
def empty: This

But 排序集覆盖empty方法并具有显式返回类型:

/** Needs to be overridden in subclasses. */
override def empty: SortedSet[A] = SortedSet.empty[A]

既然你指定了This是一个子类排序集编译器会发现排序集的实施empty首先,它返回一个排序集。编译器不知道如何转换结果排序集给你的This子类。

但如果你升级到类似排序集编译器会找到它的特征empty方法返回一个This.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么这段 Scala 代码中需要向上转换? 的相关文章

随机推荐

  • 在 R parallel::mcparallel 中,是否可以限制任一时间使用的核心数量?

    在 R 中 mcparallel 函数在parallel每次调用包时 它都会将新任务分叉给工作人员 例如 如果我的机器有 N 个 物理 核心 并且我分叉了 2N 个任务 那么每个核心都会开始运行两个任务 这是不可取的 我宁愿能够开始在 N
  • 在 React Native 中创建自定义底部选项卡导航器

    大家好 我想在 React Native 中创建时尚且自定义的底部选项卡导航 任何人都可以知道如何创建上面提到的内容 const customTabBarStyle activeTintColor 0091EA inactiveTintCo
  • 如何构建 libjpeg 9b 的 DLL 版本?

    我想构建 libjpeg 9b 的 DLL 版本 根据文件here https msdn microsoft com en us library ms235636 aspx 看来我们需要添加一个预处理器 declspec dllexport
  • IE9 的foreignObject 的替代品

    我真的很喜欢foreignObject通过svg显示HTML区域 但今天我发现它在IE9中不起作用 为什么我不惊讶 好的 所以我正在寻找一个适用于 IE9 的替代方案 但这似乎很困难 使用foreignObject 来显示多个HTML 元素
  • WordPress插件翻译问题

    我用 poedit 翻译了我的插件 它在本地主机上运行良好 在新的 WordPress 安装上 但是当我将插件上传到服务器上的现有站点上时 一些俄语字符丢失了 相反 我得到的是拉丁文 我用 utf8 编码了 poedite 文件 在标头中我
  • 无法使用 IOptionsMonitor 检测 ASP.NET Core 中的更改

    我正在开发 Asp Net Core 应用程序 我想在运行应用程序后更改配置设置 我正在使用 IOptionsMonitor 但它没有检测到更改 在 Startup cs gt Configuration 方法中我有 services Co
  • 如何在haskell中输入整数? (在控制台输入)

    如何在控制台中输入整数 将其存储在变量中 然后将其作为我创建的函数的参数传递 到目前为止 为了使其有效 我必须执行以下操作 在最后一行中 您可以看到我如何应用该函数 我想要做的是通过控制台请求变量作为整数应用于函数 然后打印结果 mayor
  • tableView: cellForRowAtIndexPath: 不仅为可见单元格调用?

    我有一个带有部分的 tableView 可以打开和关闭 因此 当我点击一个部分将其打开时 它会被单元格填满并且 UITableViewCell tableView UITableView tableView cellForRowAtInde
  • 显示:无不适用于选项

    Demo here http jsfiddle net Wener WC9yy HTML display none b not works b the hidden can b not select b br
  • Grunt 错误:找不到模块“time-grunt”

    我尝试安装 time grunt 本地和全局 清除 npm 缓存 更新 npm 但没有任何帮助 我得到 Loading Gruntfile js tasks ERROR Error Cannot find module time grunt
  • 错误:“TypeError:hidden_​​tag() 缺少 1 个必需的位置参数:'self'” 在 Flask、python 中

    我一直在创建一个基于论坛的学习系统 类似于评估项目的堆栈溢出 我对 Flask 相当陌生 但我相信我对 Python 有很好的了解 我一直在关注Flask 教程并使其适应我的项目 每当我尝试访问名为 adduser 的页面 带有用于添加用户
  • 如何在.NET中以编程方式密码保护pdf?

    我需要使用 C 中的密码以编程方式保护 PDF 文件 同一个PDF文件必须以不同的名称和不同的密码保存 有谁知道这个方法 请不要使用昂贵的工具 可以使用以下方法完成锐文 http itextpdf com using var input n
  • Lerna bootstrap 不链接本地依赖项?

    使用 lerna 和本地依赖项的正确方法是什么 我已经在 mono 存储库中配置了两个模块 以将 lerna 与本地依赖项一起使用 我期望 lerna bootstrap lerna run test 足以下载所有外部依赖项 链接本地依赖项
  • 从音频获取对数字节频率数据

    我之前问过一个与此类似的问题 但它没有解决我的问题 并且解释得不好 这次我制作了插图 希望能更好地解释 我的音频播放器有一个简单的频谱分析仪 频率存储在一个数组中 该数组在每次更新时都会更新requestAnimationFrame 数组看
  • 在C中嵌入python,未定义符号:PyExc_ImportError

    我正在尝试为 Audacious Media Player 编写一个加载 python 模块的插件 python嵌入代码来自python 2 6来源 嵌入 演示 这可以使用命令行进行编译 gcc o demo demo c lpython2
  • 使用全局调度队列时,为什么 NSURLConnection 委托方法不会被调用?

    当我执行以下操作时 dispatch async dispatch get global queue DISPATCH QUEUE PRIORITY HIGH NULL create NSURLRequest create NSURLCon
  • vscode 扩展中上下文菜单项的子菜单

    我看到很多 github 问题似乎表明 在 2020 年 9 月添加了添加子菜单的功能 当我们单击自定义上下文菜单项 例如在资源管理器 上下文中 时 该子菜单会下拉 但我找不到它在扩展文档中 有人可以指点我吗 谢谢 尼勒什 语法 contr
  • 在单行填充空间中显示两个 div - CSS

    我有两个divdiva and divb 它们的高度是固定的30px 我想将它们显示在一行中 一个接一个 这可以通过给它们宽度来完成10 and 90 分别由float left 这很好用 但我给了他们一个边框1 px这会扰乱计算 我给第二
  • 删除字符串中不匹配的 HTML 标签

    人们是否知道 PHP 函数可以从字符串中删除不匹配的 HTML 标签 例如 div This is a string b with an unmatched bold tag b div 如果没有 那么帮我建立一个 也许我可以有一个函数来计
  • 为什么这段 Scala 代码中需要向上转换?

    这编译 import scala collection trait Foo A This lt SortedSet A with SortedSetLike A This extends SortedSetLike A This this