加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 什么是可堆叠的修改?

发布时间:2020-12-16 08:56:24 所属栏目:安全 来源:网络整理
导读:我一直在读一本关于 Scala的书,并且提到了使用特征的可堆叠修改.什么是可堆叠的修改以及它们的用途是什么? 解决方法 区分可堆叠修改的基本质量(无论如何在scala中使用术语)是“超级”基于特征如何混合而动态地影响,而通常超级是静态确定的目标. 如果你写 ab
我一直在读一本关于 Scala的书,并且提到了使用特征的可堆叠修改.什么是可堆叠的修改以及它们的用途是什么?

解决方法

区分可堆叠修改的基本质量(无论如何在scala中使用术语)是“超级”基于特征如何混合而动态地影响,而通常超级是静态确定的目标.

如果你写

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读