什么是可堆叠修改?

2024-04-21

我读过一本关于 Scala 的书,里面提到了可堆叠修改 using traits。什么是可堆叠修改它们的用途是什么?


区分可堆叠修改(无论如何在 scala 中使用该术语)的基本品质是“super”根据特征的混合方式动态受到影响,而一般来说 super 是静态确定的目标。

如果你写

abstract class Bar { def bar(x: Int): Int }
class Foo extends Bar { def bar(x: Int) = x }

那么对于 Foo 来说,“超级”将永远是 Bar。

如果你写

trait Foo1 extends Foo { abstract override def bar(x: Int) = x + super.bar(x) }

然后,对于该方法,在创建类之前,super 仍然未知。

trait Foo2 extends Foo { abstract override def bar(x: Int) = x * super.bar(x) }

scala> (new Foo with Foo2 with Foo1).bar(5)
res0: Int = 30

scala> (new Foo with Foo1 with Foo2).bar(5)
res1: Int = 50

为什么这很有趣?一个说明性示例可能是您想要压缩、加密和数字签名的一些数据。您可能想要压缩然后加密然后签名,或者您可能想要加密然后签名然后压缩,等等。如果您以这种方式设计组件,您可以实例化一个自定义对象,其中包含您想要按照您想要的方式组织的位。

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

什么是可堆叠修改? 的相关文章

  • 动态 PayPal 按钮生成 - 这不是很不安全吗?

    我只是想知道 PayPal 按钮不是动态创建的 非常不安全并且很容易被 破解 吗 Like so
  • 通过反射判断类型是否为单例

    如何判断一个类型是否是单例 case object Foo case class Bar i Int def isSingleton A implicit t reflect ClassTag A Boolean assert isSing
  • 无法从 JAR 文件加载主类

    我有一个 Spark scala 应用程序 我尝试显示一条简单的消息 Hello my App 当我编译它时sbt compile并运行它sbt run没关系 我成功显示了我的消息 但他显示了错误 像这样 Hello my applicat
  • Akka 和 ReactiveMongo

    我正在尝试找到在集群工作人员之间共享相同连接池的最佳方法 我有以下结构 Master Actor gt Worker Actors 最多 100 个或更多 gt MongoDB 我想在工作人员和 MongoDB 之间放置reactivemo
  • Spark Dataframe 列可为 null 的属性更改

    我想更改 Spark Dataframe 中特定列的可为空属性 如果我当前打印数据框的模式 它看起来如下所示 col1 string nullable false col2 string nullable true col3 string
  • 使用 Spark collectionAccumulator 时出现 ConcurrentModificationException

    我尝试在 Azure HDInsight 按需群集上运行基于 Spark 的应用程序 并且看到记录了大量 SparkException 由 ConcurrentModificationException 引起 当我启动本地 Spark 实例
  • 无法设置“sbt start”的内存设置

    我正在尝试奔跑sbt start在用 Scala 编写的 Play Framework 应用程序中 在一台机器上ec2 t2 microAWS 上的实例 但我不能因为内存不足 Java 运行时环境无法继续运行 该机器有 1GB 内存 但实际
  • scala 数值求和列表

    我想要一个通用函数来对列表中的值求和 以下代码无法编译 def sum T Numeric x List T T if x isEmpty 0 else x head sum x tail 编译错误是 error type mismatch
  • 如何使 scalatest 与 Spraytestkit 和 HttpServiceActor 一起工作

    我在看Spray 1 3 1 测试套件文档 http spray io documentation 1 2 1 spray testkit 但找不到下面我需要的正确示例 我有这个样本spray 1 3 1 service trait MyS
  • 为什么嵌套 Java 类不能从 Scala 导入?

    我应该如何使用嵌套 Java 类来模拟斯卡拉莫克 特别是当所说的嵌套 Java 类来自第三方库时 鉴于以下来源 src main java Outer java Outer class that offers a Nested class
  • 如何在 Simple Build Tool 项目中调用 scala 解释器?

    我的 scala 程序正在使用 scala tools nsc interpreter IMain 的编译器接口 当我用 scalac 编译时 一切都按预期进行 但是当我使用 sbt 编译时 它仍然可以编译 但在执行时 它会在从 IMain
  • BeautifulSoup 不抓取动态内容

    我遇到的问题是我想从此页面获取相关链接 http support apple com kb TS1538 http support apple com kb TS1538 如果我在 Chrome 或 Safari 中检查 Element 我
  • 在 re.sub 中使用变量,以便 Python 解析多个日期时间格式字符串?

    我试图想出一个函数来将各种人类日期 时间格式字符串转换为Python兼容的字符串 来自 yyyy MMM dd to Y b d 到目前为止 我构建了下面的翻译字典 元组列表 yyyy Y MMM b 这样我可以将输入格式字符串中的占位符字
  • 玩 Scala Akka WebSockets 更改 actor 路径

    我遵循使用 Scala Play 和 Akka Actor 创建 Web 套接字的示例 https www playframework com documentation 2 5 x ScalaWebSockets Handling Web
  • 将相同变量绑定到共享特征的不同类型的模式

    我有一个关于通过特征共享某些行为的值的模式匹配的问题 我有一个带有两个变体的枚举 每个变体都有不同类型的绑定值 其中两种类型都实现一个特征 我试图弄清楚是否可以创建一个单一的模式 E VarA x E VarB x 形式 其中我将两种类型绑
  • 返回元组的第一个元素

    假设我创建一个将两个整数相加的函数 def addInt a Int b Int Int Int val x a b x 2 我回来了 result 2 故意为了这个问题 现在我想创建一个仅返回 x 的变量 val result addIn
  • Spark JDBC 仅返回带有列名的数据帧

    我正在尝试使用 Spark JDBC 连接到 HiveTable 代码如下 val df spark read format jdbc option driver org apache hive jdbc HiveDriver option
  • 强制 Scala 特征实现某种方法

    有没有办法指定特征必须提供方法的具体实现 给定一些 mixin class A extends B with C foo 如果出现以下任一情况 程序将编译A B or C实施foo 但是我们如何才能强制 例如 B包含装有foo的实施 您可以
  • 自定义类上的 List.sum

    我有以下代表 GF2 字段的代码 trait GF2 def unary this def that GF2 GF2 def that GF2 GF2 def that GF2 that match case Zero gt throw n
  • 在 play 框架中将 javascript 变量转换为 scala

    我在 javascript 中有一些变量 var something 1 var url CSRF routes Some thing something 我在编译期间收到错误 因为 某物 换句话说 不引用 javascript 变量 编译

随机推荐

  • 如何将 pandas 数据框显示到现有的 Flask html 表中?

    这听起来可能是一个菜鸟问题 但我一直坚持这个问题 因为 Python 不是我最好的语言之一 我有一个 html 页面 里面有一个表格 我想在其中显示一个 pandas 数据框 最好的方法是什么 使用 pandas dataframe to
  • 如何使用 javascript 将 svg use 元素插入 svg 组?

    我有一个 svg 文件 其中包含一个具有单行元素的组 我可以利用use元素并在我想要的任何位置制作多个参考副本 但是 我想使用 javascript 来添加和删除use动态元素 有没有办法使用javascript插入svguse我的行元素进
  • jquery悬停图像淡入淡出交换

    我已经在网上搜索了一段时间 试图找到编写 jquery 脚本的最佳方法来完成这个简单的任务 用优雅的淡入淡出效果交换悬停时的图像 我找到了很多解决方案 有些方法很麻烦和笨重 并将其缩小到我认为最好的两个 http designwoop co
  • 属性绑定与属性插值

    我读过一篇关于属性和属性绑定之间差异的文章 据我了解 大多数时候 Angular2 更喜欢属性绑定 因为每次数据更改后 DOM 都会更新 如果我错了 请纠正我 我有一个自定义组件并从父组件中使用它 其中 我有一个 Input named t
  • 在构建 Docker 镜像之前如何对 GitLab 的容器注册表进行身份验证?

    我有一个私有的 GitLab 项目 其中包含用于构建和推送 Docker 映像的管道 因此我必须首先向 GitLab 的 Docker 注册表进行身份验证 Research I read 使用 GitLab CI CD 对容器注册表进行身份
  • 尝试从 Visual Studio 发布 azure 函数时出错

    当我尝试使用 Visual Studio 发布函数时收到以下错误消息 知道如何解决此问题吗 System AggregateException 发生一个或多个错误 gt System Exception 发布遇到错误 我们无法 确定错误原因
  • R:ggplot2 条形图和误差条

    自从新版本的 ggplot2 0 9 3 开始 我在绘制带有误差条的条形图时遇到了问题 所以我有一个像这样的数据框 group N val sd se ci 1 206 3 37 2269533 7 9688645 4 6008261 19
  • 带有 HTML5 音频标签的自定义一键播放器

  • 如何让 Typescript 抛出运行时错误?

    import Component from angular core Component selector app root templateUrl app component html styleUrls app component cs
  • SQL 更新查询 - 聚合可能不会出现在 UPDATE 语句的集合列表中

    我正在尝试编写一个查询 用 HOLIDAY DATE TABLE 中最高的主键值 HID 更新 tbl8 update transactions HID 字段 其中为空 我收到以下错误 聚合可能不会出现在 UPDATE 语句的集合列表中 我
  • MySQL 字符串替换

    我有一列包含 url id url http www example com articles updates 43 http www example com articles updates 866 http www example co
  • 通过样式更改 Android 对话框按钮文本大小

    我正在尝试通过样式放大所有应用程序对话框按钮上的文本大小 以下代码将更改按钮背景颜色 甚至更改文本大小写 但由于某种原因 textSize 项目不受支持
  • 使用soapUI中的Groovy teststep将请求/响应文件存储在本地目录中

    通过soapUI中的常规测试步骤 我希望所有请求和响应文件都存储在具有系统日期的本地目录中 SoapUI 中的常规测试步骤 def name context expand Input TG def locatie context expan
  • jQuery - 从 JSON Stringify 获取值

    我有一个表格 我需要从中获取值 var formConfig JSON stringify bookingform serializeArray 返回如下 name client id value 1 name consignee id v
  • 如何以编程方式访问 Silverlight FrameworkElement 的 ToolTipService?

    我们有一种语言机制 可以在加载 XAML 页面时递归遍历它们 检查每个元素的 Tag 属性 并使用其值来检索要应用于该元素的字符串资源 它目前不支持工具提示 我们必须在每个页面上都有特定的代码才能将语言资源应用于它们 我正在尝试将此功能添加
  • 没有公钥,GitLab 无法克隆公共存储库

    使用亚搏体育appGitLab 6 8 2 我可以以匿名方式克隆公共存储库吗 我的用户命名空间中的存储库标记为public 如果没有在 GitLab 中保存公钥 我就无法克隆它 例如 gt ssh T email protected cdn
  • svn 外部...是或否?

    我在这里读到了一些谴责使用 svn externals 的答案 我确实看到它们如何被滥用 这确实使我们更加依赖 Subversion 但我真的不认为我们的团队会很快放弃它 无论如何 这就是我的困境 我们的解决方案引用了多个项目 这些项目位于
  • 如何将 numpy 数组分成更小的块/批次,然后迭代它们

    假设我有这个 numpy 数组 1 2 3 4 5 6 7 8 9 10 11 12 我想将其分成两批 然后迭代 1 2 3 Batch 1 4 5 6 7 8 9 Batch 2 10 11 12 最简单的方法是什么 EDIT 我很抱歉我
  • 在笑话单元测试角度中显示正确的错误

    我正在 NX 角度工作区中编写单元测试 有时它会给出这样的错误 node 15320 UnhandledPromiseRejectionWarning TypeError Converting circular structure to J
  • 什么是可堆叠修改?

    我读过一本关于 Scala 的书 里面提到了可堆叠修改 using traits 什么是可堆叠修改它们的用途是什么 区分可堆叠修改 无论如何在 scala 中使用该术语 的基本品质是 super 根据特征的混合方式动态受到影响 而一般来说