+- Scala 中通用声明中的符号

2023-12-26

我正在查看 PartialFunction 的文档这个链接 http://www.scala-lang.org/api/current/index.html#scala.PartialFunction:

trait PartialFunction[-A, +B] extends (A) ⇒ B

也许有人可以帮助澄清通用声明中加号和减号的含义?


“+”和“-”的意思协变和逆变 https://stackoverflow.com/a/674090/1809978分别类型。简而言之,这意味着:

PartialFunction[-A1, +B1] <: PartialFunction[-A2, +B2]除非A1 :> A2 and B1 <: B2, where <:是一种子类型关系。

“-”通常用于输入参数,“+”用于输出 - 在 C# 中,它们甚至使用各自的关键字in and out。还有一些比较原始的Java 中的通用方差支持 https://stackoverflow.com/questions/2501023/demonstrate-covariance-and-contravariance-in-java建立在存在类型之上 - 实际上你可以使用_ <: SomeType(协方差)或抽象类型成员type T <: SomeType在 Scala 中也是如此。

不带修饰符PartialFunction[A1, B1]与 a 没有直接关系PartialFunction[A2, B2](换句话说,它是不变的)。

附:此类类型还受到一些限制,例如协变(“+”)类型不能处于逆变位置(只能从方法返回它),反之亦然。这样做是为了支持里氏替换原则 https://en.wikipedia.org/wiki/Liskov_substitution_principle并且自然可以通过“in”/“out”解释来理解。

另外,值得注意的是A => B(语法糖为Function1) 本身正在使用协方差/逆变方差:

 trait Function1 [-T1, +R] extends AnyRef

由于这些函数可以通过子类型进行扩展,这使得它们在理论上也是部分的(尽管这不是 Scala 处理这些函数的方式)——甚至技术上 Scala 中的“全部”FunctionN 也可以扩展、重新定义、返回 null 等等。

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

+- Scala 中通用声明中的符号 的相关文章

  • Play框架2:如何在路由、视图和控制器之间传递对象?

    我正在尝试将书籍对象从视图传递到路线 然后将其发送到控制器中进行计算 我的代码如下 bookList scala html books java lang Iterable Book main BookList div class row
  • 在结构定义上指定“Fn”特征绑定,而不修复“Fn”参数之一

    我有一个包含函数对象的结构 struct Foo
  • 将列表拆分为多个具有固定元素数量的列表

    如何将元素列表拆分为最多包含 N 个项目的列表 例如 给定一个包含 7 个元素的列表 创建 4 个组 最后一组可能包含较少的元素 split List 1 2 3 4 5 6 seven 4 gt List List 1 2 3 4 Lis
  • Spark:用列的平均值替换数据框中的空值

    如何创建 UDF 以编程方式将每列中 Spark 数据框中的空值替换为列平均值 例如 在示例中 数据 col1 空值的值为 2 4 6 8 5 5 5 示例数据 col1 col2 col3 2 null 3 4 3 3 6 5 null
  • 与嵌套泛型集合的混淆

    请帮助我理解为什么add1 and add4 报告错误以及原因add2 and add3 不 具体来说 请举例说明如果编译器允许其中每一个进行编译 则会产生不良后果的示例 class InnerTypeConfusion interface
  • 逆变方法参数类型

    wiki 逆变方法参数类型 https en wikipedia org wiki Covariance and contravariance 28computer science 29 Contravariant method argum
  • Swift:覆盖子类内的类型别名

    所以我正在考虑在我的项目中使用自定义模式 但我无法让它发挥作用 主要思想是改变typealias在每个子类上访问子类特定的接口 protocol InstanceInterface class typealias Interface var
  • 运行时的泛型[重复]

    这个问题在这里已经有答案了 有两个程序 为什么第一个代码有效 我希望它在访问元素时抛出运行时异常 因为添加了字符串而不是整数 相似地 第二个代码在访问元素时抛出运行时异常 尽管它能够轻松地在 arrayList 中添加 Integer 尽管
  • 如何抑制spark输出控制台中的“Stage 2===>”?

    我有数据帧并试图获取不同的计数并且能够成功获取不同的计数 但是每当 scala 程序执行时我都会收到此消息 Stage 2 gt 1 1 2 我如何在控制台中抑制特定的此消息 val countID dataDF select substr
  • 有没有办法捕获 Spark 中使用通配符读取的多个 parquet 文件的输入文件名?

    我使用 Spark 将多个 parquet 文件读取到单个 RDD 中 并使用标准通配符路径约定 换句话说 我正在做这样的事情 val myRdd spark read parquet s3 my bucket my folder parq
  • Source.getLines 中的默认参数错误 (Scala 2.8.0 RC1)

    假设我运行 Scala 2 8 0 RC1 以下 scala 代码应该打印出文件 c hello txt 的内容 for line lt Source fromPath c hello txt getLines println line 但
  • 如何在 Scala 中打印任何内容的列表?

    目前我有一个打印整数的方法 def printList args List Int Unit args foreach println 我如何修改它 使其足够灵活 可以打印任何内容的列表 您不需要专用的方法 所需的功能已经在集合类中 pri
  • 为什么不自动装箱泛型的 Java 基本类型?

    Java 不允许在通用数据结构中使用原始类型 例如 不允许使用 ArrayList 原因是 原始类型不能直接转换为Object 然而 Java 1 5 确实支持自动装箱 并且包装类在通用数据结构中工作 那么为什么编译器不能将其自动装箱到 A
  • 该组件没有由 uri 标识的资源

    我想创建一个通用数据网格以在我的所有视图 用户控件上使用 这是我的结构 Class Library called Core Class called ViewBase public class ViewBase UserControl pu
  • Play Framework 2.3 (Scala) 中的自定义 JSON 验证约束

    我设法使用自定义约束实现表单验证 但现在我想对 JSON 数据执行相同的操作 如何将自定义验证规则应用于 JSON 解析器 示例 客户端的 POST 请求包含用户名 username 我不仅要确保该参数是非空文本 而且还要确保该用户确实存在
  • 如何使用用户输入变量作为通用包的参数?

    In Stack adb我指定了两个参数 大小和类型 我想创建一个堆栈 该堆栈的数据类型与用户在我的堆栈中指定的数据类型完全相同multistack adb file 我似乎找不到一种方法来创建新的包或使用用户定义的堆栈类型变量来实例化堆栈
  • Scala 和变量中的模式匹配

    我是 Scala 新手 有点想知道模式匹配是如何工作的 想象一下我有以下内容 case class Cls i Int case b Cls i gt Ok case e Cls gt Ok case f Cls gt Ok case s
  • 哪个更快: for 或 foreach [重复]

    这个问题在这里已经有答案了 可能的重复 C 中的 For 与 Foreach 循环 https stackoverflow com questions 1124753 for vs foreach loop in c 假设我有一个收藏 Li
  • 运行具有外部依赖项的 Scala 脚本

    我在 Users joe scala lib 下有以下 jar commons codec 1 4 jar httpclient 4 1 1 jar httpcore 4 1 jar commons logging 1 1 1 jar ht
  • 对 Scala Not Null 特征的库支持

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

随机推荐

  • Jquery datepicker 2个月显示

    我正在使用 jquery ui 日期选择器来显示多个月份 弹出窗口将这些月份显示在其他月份的下方 有没有办法让下个月显示在右侧 我现在正在 datePicker 中处理这个 所以 根据 jQuery datePicker 文档 number
  • 如何从 Jinja2 模板中获取所有未定义的变量?

    我试图从 Jinja2 模板中获取所有未定义的变量 假设我有一个如下所示的模板 tmpstr for row in csv sample row field1 stuff row field2 morestuff row field3 en
  • 如何使用 maven-scala 插件解决依赖项的“错误:错误的符号引用”?

    我正在使用 Scala 和 Slick 构建一个小型数据库查询实用程序 并使用 Maven 作为构建和打包工具 我的代码编译时没有任何语法错误 但构建失败并出现以下错误 INFO maven scala plugin 2 15 0 comp
  • 如何发送和接收广播消息

    我正在尝试在选项卡内的两个活动之间传递数据 我正在尝试使用sendBroadcast 设置断点后我永远不会到达onReceive 显现
  • JavaScript 错误 - 无法调用 null 的方法“appendChild”

    我是 Javascript 以及一般编程 的新手 一直在尝试基本掌握 DOM 的使用 如果这是一个非常基本的错误 我深表歉意 但我环顾四周 找不到答案 我正在尝试使用appendChild方法将标题和一些段落文本添加到下面非常基本的HTML
  • java.lang.IllegalArgumentException:观察者为空

    我的一个应用程序的用户报告了此错误 我对这意味着什么以及如何解决它感到困惑 经过一番谷歌搜索后 仍然没有运气 有人以前见过这个或者知道如何解决它吗 java lang IllegalArgumentException The observe
  • VS 2019 的终端在哪里?

    我正在运行 16 3 4 所以我认为它应该已经包含早期预览版本的更新 这里提到 https devblogs microsoft com visualstudio say hello to the new visual studio ter
  • xreadlines 和 for 循环文件之间的区别

    在 Python 2 7 中有一个文件对象 f open my file r for 循环文件 最常见的方式 和使用xreadlines 功能 for line in f Do something with line and for lin
  • OpenMP:将所有线程分为不同的组

    我想将所有线程分为 2 个不同的组 因为我有两个并行任务要异步运行 例如 如果总共有 8 个线程可用 我希望有 6 个线程专用于任务 1 另外 2 个线程专用于任务 2 如何使用 OpenMP 实现这一目标 这是一份工作OpenMP 嵌套并
  • 使用 Groovy 脚本访问当前 Jenkins 构建

    我创建了一个 Groovy 脚本 用于System Groovy ScriptJenkins 作业中需要访问当前作业的当前版本的步骤 使用 Hudson model 时需要当前版本Cause UpstreamCause将我当前作业的当前版本
  • Windows 10 1703 升级后 Windows Mobile 设备中心停止工作

    我刚刚安装了新的 Windows 10 版本 1703 现在我无法连接任何 Windows CE 设备 因为 Windows Mobile 设备中心 6 1 无法运行 https i stack imgur com 1TRsz png我尝试
  • REST API 和供应商特定内容类型的版本控制

    我读了很多关于 REST API 版本控制的内容 例如在这个线程中 API 版本控制的最佳实践 https stackoverflow com questions 389169 best practices for api versioni
  • Kotlin:通过强制转换修改(不可变)列表,合法吗?

    我们知道 Kotlin 中的列表是不可变的 即您不能像下面那样添加和删除 class TempClass var myList List
  • Vagrant 和 Docker 与微服务

    我有一组微服务 我希望使用 Docker 对其部署进行自动化和标准化 我一直在阅读有关 Vagrant 的内容 并且对使用 Vagrant 设置环境有几个问题 据我所知 Vagrant 用于设置虚拟机 而 Docker 用于创建容器 在虚拟
  • Paypal 付款数据传输 (PDT) 错误 4002

    我正在努力将我的网站与贝宝集成并使其在沙盒模式下工作 我正在 Codeigniter PHP 工作 我已经收到 IPN 通知 工作正常 但似乎无法弄清楚 PDT 出了什么问题 需要它显示正确的确认页面并返回 我已经多次检查身份令牌 确保 h
  • 为什么我突然收到这个错误?

    所以我有一个 WCF 服务 其中有一个 Process 方法 此方法从一个表中读取一个字节数组 一个文件 然后基本上将该文件中的数据放入多个表中 它只是迭代每一行 在生产环境一个月以来 它运行良好 现在突然间 它间歇性地抛出这个错误 Sys
  • 如何从 Flutter 应用程序在 google chromecast 中播放 YouTube 视频?

    我的 Flutter 应用程序有一些 YouTube 视频链接 那些 YouTube 链接 我想通过 google chromecast 进行流式传输 我已经看到一些使用下面的颤振库进行视频流投射 https pub dev package
  • 如何使用 dplyr 重新编码(和反向编码)列中的变量

    继 2013 年最后一次使用 R 之后 我再次拿起 R 我已经习惯使用 dplyr 但我在执行一个简单任务时遇到了问题 我有一张桌子 看起来像 Participant Q1 Q2 Q3 Q4 Q5 1 agree neutral NA Di
  • Laravel 关系集合的自定义排序

    我有点被一些通常很简单的事情所困扰 我需要根据某个值和 排序顺序 数组将 hasMany 关系中的记录排序为自定义顺序 我下面的代码不起作用 因为我正在向 uSort 传递一个雄辩的集合 并且我不知道如何绕过它 go this gt has
  • +- Scala 中通用声明中的符号

    我正在查看 PartialFunction 的文档这个链接 http www scala lang org api current index html scala PartialFunction trait PartialFunction