Scala 类型推断和多个参数列表

2023-12-08

(斯卡拉 2.11.8)

考虑以下代码:

trait Class[A] {
  def f1[B >: A](arg1: Int)(ord: Ordering[B]): Int

  def f2[B >: A](arg1: Int, ord: Ordering[B]): Int

  def f[B >: A](ord: Ordering[B]): Int = {
    f1(123)(ord) // Compilation error!
    f2(123, ord) // OK
  }
}

在这里,线f1(123)(ord) raises type mismatch; found : Ordering[B] required: Ordering[A] Note: B >: A, but trait Ordering is invariant in type T. You may wish to investigate a wildcard type such as _ >: A. (SLS 3.2.10)

如果我们将调用更改为f1[B](123)(ord),错误消失。

为什么多个参数列表的存在会让类型检查器感到困惑?这是一个错误,还是预期的结果?


这不是一个错误 - 参数列表的分离意味着类型参数是根据first单独的参数列表:

f1(123)(ord) 

可以重写为:

val partiallyApplied = f1(123)
partiallyApplied(ord)

现在——什么是partiallyApplied的类型?由于未显式设置类型参数,并且没有可用于推理的参数/返回类型,因此类型参数被推断为A(没有具体的B然而!所以partiallyApplied的类型是(Ordering[A]) => Int),因此将其与Ordering[B]后来给出了例外。

相反,当调用时:

f2(123, ord)

Since ord有类型Ordering[B],类型参数可以推断为B,因此编译成功。

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

Scala 类型推断和多个参数列表 的相关文章

随机推荐

  • 如何从 json 结果中快速删除可选文本

    我正在使用 newsApi 从中获取新闻列表 我根据新闻的属性创建了模型 所有属性在模型中都是可选的 当我解析它时 它会打印到控制台获取结果 但所有字段都有带有可选文本的数据 我创建了三个基于新闻 api 字段的结构 它们就像 struct
  • 检索数据库中所有表的列表

    我在通常的数据库文件夹下有这个数据库文件 里面有一堆表 请注意 我不想在命令行下检索 我知道我可以使用 tables 命令 我想使用代码检索其中所有表的列表 以便我可以对每个表执行一些特定的算法 另外 我在Android上没有发现任何与此问
  • 服务器发送的事件不适用于球衣 SSE

    我正在尝试使用来自 Jersey 的 JavaScript SSE 我的资源中有以下代码 我在 Java7 和 Tomcat 7 上托管 我没有收到任何错误 但我在页面上也看不到数据 I call broadcast发布数据 它确实显示消息
  • Spark - 带有递归的窗口? - 有条件地跨行传播值

    我有以下数据框显示购买收入 user id visit id revenue 1 1 0 1 2 0 1 3 0 1 4 100 1 5 0 1 6 0 1 7 200 1 8 0 1 9 10
  • UIButton 单击事件在自定义 UITableViewCell 内多次调用

    我有一个习惯UITableViewCell其中有一个UIButton在里面 单击按钮时 单击事件将被多次调用 这是我正在使用的代码 自定义单元格 cs public static CustomCell Create return Custo
  • 如何以编程方式在虚拟现实模式下打开街景?

    使用以下代码 我使用特定位置的纬度和经度打开街景视图 Intent streetView new Intent android content Intent ACTION VIEW Uri parse google streetview c
  • C++:如何在 iOS 中已有的 MFC 应用程序中重用加密的 Sqlite 数据库

    我正在进行一个想要重用的项目SQLite的数据库iOS应用程序在我的MFC C 应用 The iOS数据库使用 sqlite3 key 加密 并且使用SQL密码用于数据库处理 And 我在用SQLite 加密借助以下工具进行数据库处理Cpp
  • 如何将 3D 字符数组传递给函数

    我有一个 3D 字符数组 table 我想将其传递给 void 函数 以便它可以对其进行更改 我怎样才能做到这一点 void make char minor char greater 20 30 50 make greater 我想这不会起
  • iOS 自动布局按比例调整 UIView 的大小?

    I m trying to learn Autolayout so I m reading through tutorials and also messing around with some UIViews just to see wh
  • “$”未被识别为内部或外部命令

    我已经广泛搜索了这个问题的答案 但没有找到解决我的特定问题的答案 这就涉及到windows中的命令行了 我正在尝试遵循有关使用 npm 的教程 本教程中的所有命令都以 这个符号开头 即美元符号 当我输入 npm config list 来获
  • 混淆批处理+HTA混合脚本

    以下是混合批处理脚本
  • Safari 推送通知证书问题

    我有一个网站 它使用 Safari 浏览器的推送通知 它工作得很好 直到最近我开始收到一条消息说 推送包签名验证失败 我相信这与最近的 Apple WWDRCA 证书到期有关 现在正在尝试将新证书安装到系统中 他们的文档说 如果您使用 op
  • netezza nzload 与 isnumeric 类似的功能吗?

    我有来自一个平面文件的数据 我正在通过该文件加载到 netezza 中nzload 某些字段类型是数字 但是接收到的数据有时可能包含无效字符 我如何检查以确保数据isnumeric在我的进口中 I saw try cast对于 T Sql
  • 当我从 pandas DataFrame 中采样一行后,如何获取一个单元格的值?

    我有一个pandas我已经成功地从 DataFrame 中采样了一行 但问题之一是它只是返回另一个 DataFrame 我需要读取返回的行并获取该行的特定元素的值 My DataFrame好像 Date Open High Low Clos
  • 如何在Amazon ec2上运行seed.rb文件

    最近 我使用 Amazon EC2 托管了 Ruby on Rails 应用程序弹性豆茎 除了我的 seeds rb 文件之外 一切正常 我的 seeds rb 文件在托管时未执行 我在用活动管理员我还在 seeds rb 文件中定义了第一
  • 有没有办法强制执行模块间依赖/初始化顺序?

    使用Azure IoT Edge 我还没有找到任何方法来保证部署中容器 模块的初始化顺序 举例来说 假设我有 2 个模块 A 和 B A 是服务器 B 是依赖于 A 的客户端 据我所知 无法保证 A 在 B 之前启动 Azure IoT E
  • Raspbian QML 性能不佳

    相同的 QML 程序在 Freescale Yocto 和 Raspberry Raspbian 上运行 这两个测试设备具有几乎相同的 CPUarmv7 但Raspbain这边的表现却非常糟糕 并发出此警告 JIT is disabled
  • 使用 sed 从文件中删除 ^M 字符

    我在文件中有这一行 ULNET PA client sgcib broker keplersecurities KEPLER 我尝试去掉 M 回车 字符 所以我使用了 sed s M g 然而 这确实删除了 M 之后的所有内容 root l
  • spring-boot 2.3.6,如何设置mongo的UUID表示?

    我正在尝试升级到 spring boot 2 3 6 我正在使用 spring data MongoRepositories 没有直接调用 MongoClient 或 MongoClient 获取异常 Caused by org bson
  • Scala 类型推断和多个参数列表

    斯卡拉 2 11 8 考虑以下代码 trait Class A def f1 B gt A arg1 Int ord Ordering B Int def f2 B gt A arg1 Int ord Ordering B Int def