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 为什么这很有趣?一个说明性示例可能是您要压缩,加密和数字签名的一些数据.您可能希望压缩然后加密然后签名,或者您可能希望加密然后签名然后压缩等.如果您以这种方式设计组件,您可以实例化一个自定义对象,您想要按照您想要的方式组织. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |