toSet 和类型推断

2023-11-25

有人可以解释为什么以下不起作用。当我这样做时,不知怎的会丢失编译类型推断的一些信息toSet,但我不明白为什么。

scala> case class Foo(id: Int, name: String)
defined class Foo

scala> val ids = List(1,2,3)
ids: List[Int] = List(1, 2, 3)

scala> ids.toSet.map(Foo(_, "bar"))
<console>:11: error: missing parameter type for expanded function ((x$1) => Foo(x$1, "bar"))
              ids.toSet.map(Foo(_, "bar"))
                                ^

scala> ids.map(Foo(_, "bar")).toSet
res1: scala.collection.immutable.Set[Foo] = Set(Foo(1,bar), Foo(2,bar), Foo(3,bar))

假设我有以下内容:

trait Pet {
  def name: String
}

case class Dog(name: String) extends Pet

val someDogs: List[Dog] = List(Dog("Fido"), Dog("Rover"), Dog("Sam"))

Set其类型参数不是协变的,但是List是。这意味着如果我有一个List[Dog]我也有一个List[Pet], but a Set[Dog] is not a Set[Pet]。为了方便起见,Scala 允许您在从List(或其他集合类型)到Set通过提供显式类型参数toSet。当你写的时候val a = ids.toSet; a.map(...),这个类型参数是推断出来的,你没问题。当你写的时候ids.toSet.map(...),另一方面,它不是推断出来的,你就不走运了。

这允许以下操作:

scala> val twoPetSet: Set[Pet] = someDogs.toSet.take(2)
twoPetSet: Set[Pet] = Set(Dog(Fido), Dog(Rover))

虽然这不会:

scala> val allDogSet: Set[Dog] = someDogs.toSet
allDogSet: Set[Dog] = Set(Dog(Fido), Dog(Rover), Dog(Sam))

scala> val twoPetSet: Set[Pet] = allDogSet.take(2)
<console>:14: error: type mismatch;
 found   : scala.collection.immutable.Set[Dog]
 required: Set[Pet]
Note: Dog <: Pet, but trait Set is invariant in type A.
You may wish to investigate a wildcard type such as `_ <: Pet`. (SLS 3.2.10)
       val twoPetSet: Set[Pet] = allDogSet.take(2)
                                               ^

这值得混淆吗?我不知道。但这是有道理的,这是 Collections API 设计者做出的决定toSet,所以我们就坚持下去了。

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

toSet 和类型推断 的相关文章

  • 我在 Scala 中将资源放在哪里?

    在学习使用 Scala 和 JavaFX 时 我在 a 中遇到了以下代码ProScalaFX 示例 https github com jpsacha ProScalaFX val resource getClass getResource
  • 将 Scala 文件转换为 Dll

    我有一些使用 IntelliJ 和 SBT Plugin 编写的 scala 代码 并希望将代码作为 C 的 DLL 提供给我 我已经尝试使用 ikvmc 我通过 package 将所有类打包在一个罐子中 之后 我手动设置一个 jar 其中
  • 写入 Delta 表时检测到架构不匹配 - Azure Databricks

    我尝试将 small radio json json 加载到 Delta Lake 表 在此代码之后我将创建表 我尝试创建 Delta 表 但收到错误 写入 Delta 表时检测到架构不匹配 可能与分区有关events write form
  • Spark - Scala - 用另一个数据帧中的查找值替换数据帧中的值

    我正在 Databricks 上使用 Spark 编程语言是Scala 我有两个数据框 主要数据框 见截图 1 https i stack imgur com EShir png 查找数据框 见截图3 https i stack imgur
  • 如何在 Akka Stream 中记录流量?

    我有一个带有单个流 图的 Akka Stream 应用程序 我想测量源头的流量并每 5 秒记录一次 例如 在过去 5 秒内收到 3 条消息 我尝试过 someOtherFlow groupedWithin Integer MAX VALUE
  • 简单的 Scala actor 问题

    我确信这是一个非常简单的问题 但很不好意思地说我无法理解它 我有一个 Scala 值列表 我想使用演员来并行地对每个值进行一些 外部 调用 我想等到所有值都已处理完毕 然后继续 没有共享值被修改 有人可以建议吗 Thanks Scala 中
  • 为什么我的 Project Euler Problem 12 算法这么慢?

    我已经在 Scala 中为 PE P12 创建了解决方案 但速度非常非常慢 有人可以告诉我为什么吗 如何优化这个 calculateDevisors 简单的方法和calculateNumberOfDivisors 除数函数具有相同的速度 i
  • 将无形状 HList 转换为 TupleN,其中元组形状不需要与 HList 形状完全匹配

    我想创建相当于 def toTupleN A1 AN L lt HList l L TupleN A1 AN 代码使用toTupleN仅当恰好有一个时才应该编译N中的值的组合l可以从中创建元组 其他任何内容都应该生成编译时错误 应考虑可用的
  • 将列表拆分为多个具有固定元素数量的列表

    如何将元素列表拆分为最多包含 N 个项目的列表 例如 给定一个包含 7 个元素的列表 创建 4 个组 最后一组可能包含较少的元素 split List 1 2 3 4 5 6 seven 4 gt List List 1 2 3 4 Lis
  • Scala:在运行时获取 mixin 接口

    我需要在运行时从给定的类获取所有接口 全部加载在类加载器中 例如 如果一个类是这样声明的 trait B trait C trait D class A extends B with C with D 我想在运行时获取这些信息 A 取决于
  • 最小重复子串

    我正在看 Perl代码高尔夫页面 http www perlmonks org node id 82878 不要问为什么 并遇到了这个 第 3 洞 最小重复图案 编写一个子例程 它接受一个字符串 该字符串可能包含 重复模式 并返回最小的重复
  • 如何抑制spark输出控制台中的“Stage 2===>”?

    我有数据帧并试图获取不同的计数并且能够成功获取不同的计数 但是每当 scala 程序执行时我都会收到此消息 Stage 2 gt 1 1 2 我如何在控制台中抑制特定的此消息 val countID dataDF select substr
  • 使用 Akka 玩 2.5 - 找不到参数超时的隐式值:akka.util.Timeout

    我正在尝试使用 Play 2 5 测试 Akka 但遇到了一个似乎无法解决的编译错误 我正在关注 Play 文档中的此页面 https playframework com documentation 2 5 x ScalaAkka http
  • 错误:协变类型 A 出现在逆变位置

    我试图写一个不可变的Matrix A 班级 我希望该类是协变的A但是当我把 在 前面A编译器开始抱怨类中的某些操作 以下是我的相关子集Matrix类 实际类比以下子集大 5 倍左右 class Matrix A private val co
  • Spark Scala 将列从一个数据帧复制到另一个数据帧

    我有一个原始数据框的修改版本 我在其上进行了聚类 现在我想将预测列恢复为原始 DF 索引没问题 因此匹配 我该怎么做 使用这段代码我得到一个错误 println Predicted dfWithOutput show println Ori
  • 对 Scala Not Null 特征的库支持

    Notice 从 Scala 2 11 开始 NotNull已弃用 据我了解 如果您希望引用类型不可为空 则必须混合魔法NotNull特征 编译器会自动阻止你输入null 可以值在里面 看到这个邮件列表线程 http www nabble
  • 类型级编程有哪些示例? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我不明白 类型级编程 是什么意思 也无法使用Google找到合适的解释 有人可以提供一个演示类型级编程的示例吗 范式的解释和 或定义将
  • Scala 中的 Shapeless 结构编程:如何正确使用 SYB 实现?

    我想使用SYB http research microsoft com en us um people simonpj papers hmap 实施于无形图书馆 https github com milessabin shapeless编写
  • Scala 特性:val/def 和 require

    下面的代码抛出IllegalArgumentException trait T val x Long require x gt 0 object T extends App val y new T val x 42L 而以下情况则不然 tr
  • 玩:将表单字段绑定到双精度型?

    也许我只是忽略了一些明显的事情 但我无法弄清楚如何将表单字段绑定到 Play 控制器中的双精度型 例如 假设这是我的模型 case class SavingsGoal timeframeInMonths Option Int amount

随机推荐

  • Google 地图 Android API v2 - 交互式信息窗口(就像原始 Android 谷歌地图一样)

    我正在尝试定制InfoWindow使用新的 Google Maps API v2 单击标记后 我希望它看起来像谷歌原始地图应用程序中的那样 像这样 当我有ImageButton在里面 它不起作用 整个InfoWindow被选中 而不仅仅是I
  • 改造 - 在将响应正文解析为 json 之前删除一些无效字符

    我有一个外部 Web 服务 它在响应正文中返回 json 但嵌套在括号中 如下所示 door x 103994 001461 door y 98780 7862376 distance 53 3 使用此代码 class AddressInf
  • Prolog - 字符串或字符的 CharCode 列表

    我在序言中有一个字符代码列表 我想把它们变成角色 例如 L abc 回报L 97 98 99 假设我从L 97 98 99 无论如何 是否有将 L 转换回 abc 这样 如果存在一种方法 convert L X 回报X abc Thanks
  • Facebook 身份验证 - 不安全的 JavaScript 尝试使用 URL 访问框架

    我正在尝试在我的网站中实施 Facebook 登录系统 当它尝试连接到 Facebook 时 我从控制台日志中收到错误 Unsafe JavaScript attempt to access frame with URL https s s
  • 如何以编程方式清除 MSMQ 系统队列日志?

    需要每周批量清除系统队列日志 系统队列的正确格式 FormatName Direct os System JOURNAL 我已经在 Windows 7 和 Windows 2003 上测试了这种格式 os 后面的点表示本地主机 本地计算机
  • Summernote图片上传

    我的 Summernote 编辑器有问题 我想将图像上传到服务器上的目录中 我有一些脚本
  • 如何清除Service Worker的缓存?

    所以 我有一个包含 Service Worker 的 HTML 页面 Service Worker 缓存 index html 和我的 JS 文件 问题是当我更改 JS 时 更改不会直接显示在客户端浏览器上 当然 在 chrome 开发工具
  • 从 QValidator 获取视觉反馈

    我正在尝试使用QValidator后代 实际上在 PyQt5 中 但这并不重要 来验证一系列行编辑 一小段摘录是 class IPv4 QWidget def init self super IPv4 self init uic loadU
  • 相机预览仍然是黑色

    我正在 Android 应用程序上尝试相机预览 当我在真实设备上尝试时 它给我黑屏 这是我的代码 它不会引发任何错误 但屏幕仍然是黑色的 有任何想法吗 import android app Activity import android c
  • 在第一个编译\链接错误上停止解决方案构建 - msbuild

    我正在使用 VS2013 的 MSBuild 编译一个包含许多项目的解决方案 我希望如果其中一个项目无法编译并且 msbuild 的错误代码将不为零以指示某些内容失败 则构建停止 能做到吗 我正在运行此命令来开始编译 MS BUILD PA
  • 更新 Woocommerce 中可变产品的所有变体价格

    我需要循环获取所有变体 ID 并更新价格 简单的查询和循环如下所示 params array posts per page gt 1 post type gt product variation post parent gt product
  • Spring Boot @WebIntegrationTest 和 TestRestTemplate - 是否可以回滚测试事务?

    我有一个带有 Spring Data Rest 的 Spring Boot 应用程序 我使用 WebIntegrationTest随着TestRestTemplate在我的集成测试中 测试的基类看起来像这样 RunWith SpringJU
  • iText 7.0.4.0 - 将 PdfDocument 转换为字节数组

    我正在尝试逐页拆分 PDF 文件 并获取每个页面文件的字节数组 但是 我在 C 的 iText 版本 7 0 4 中将每个页面转换为字节数组时遇到问题 其他解决方案中引用的方法依赖于 PdfWriter GetInstance 或 PdfC
  • 使用java从服务器端检测浏览器版本

    我看到很多与浏览器检测 用户代理检测等相关的帖子 我想从服务器端检测版本并基于此发送适当的数据 我知道浏览器可以使用工具模仿版本 但这对我来说并不重要 我需要 java 解决方案来进行准确的版本检测 这是解释如何使用的代码用户代理实用程序
  • exc 错误访问代码 2

    过去三天我一直在与这个错误作斗争 但没有运气 我正在开发一个组合应用程序uiviewcontrollers and uitableviewcontrollers在表视图中 我单击 添加 按钮 它崩溃了 尚未添加核心数据编码 我什至已经启用N
  • 文件选择器在 Windows 上不接受 mimetype 'text/csv'

    我正在使用 filepicker 并设置 text csv 上传的 mimetype 它在 Mac chrome 上运行得很好 但在 Windows 上则不然 知道如何解决这个问题吗 谢谢 Ace 也尝试替代的模仿类型 text comma
  • 使用 BinData 进行 MongoDump 查询

    Mongodump 文档指定您可以使用特定查询进行转储 i e mongodump host localhost db mydb collection testCollection query SomeKey some value 我将 i
  • 将 UIImage 剪成圆形

    我想剪一个UIImage成一个圆圈 以便我可以将其用作注释 我在这个网站上找到的每个答案都描述了创建一个UIImageView 然后修改它并显示它 但你不能将注释的图像设置为UIImageView 只有一个UIImage 我该怎么办 Xco
  • Asp.Net MVC 生命周期[重复]

    这个问题在这里已经有答案了 可能的重复 与 ASP NET WebForms 相比 ASP NET MVC 页面的 页面生命周期 是怎样的 如果专家能够向我指出 ASP Net MVC 生命周期 我将不胜感激 我有兴趣知道一旦请求到来并发送
  • toSet 和类型推断

    有人可以解释为什么以下不起作用 当我这样做时 不知怎的会丢失编译类型推断的一些信息toSet 但我不明白为什么 scala gt case class Foo id Int name String defined class Foo sca