Scala:扩展内部类,不涉及外部类
发布时间:2020-12-16 18:22:11 所属栏目:安全 来源:网络整理
导读:我可以在外部类中或在从外部类派生的类中扩展内部类/特征.我可以扩展外部类的特定实例的内部类,如下所示: class Outer{ class Inner{}}class OtherCl(val outer1: Outer){ class InnA extends outer1.Inner{}} 注意:即使这似乎编译得很好,产生了非常有趣的
我可以在外部类中或在从外部类派生的类中扩展内部类/特征.我可以扩展外部类的特定实例的内部类,如下所示:
class Outer { class Inner{} } class OtherCl(val outer1: Outer) { class InnA extends outer1.Inner{} } 注意:即使这似乎编译得很好,产生了非常有趣的可能性: trait OuterA { trait InnerA } trait OuterB { trait InnerB } class class2(val outerA1: OuterA,val outerB1: OuterB) { class Inner2 extends outerA1.InnerA with outerB1.InnerB } 但这不会编译: class OtherCl extends Outer#Inner 据我所知,我正在尝试扩展一个参数化类,其中type参数是外部类的一个实例,所以有一些影响 class OtherCl[T where T is instance of Outer] extends T.Inner 那么无论如何扩展一个内部类/特征,它在一个外部特征/类中,而不引用外部特征/类? 我不想在没有外部类的实例的情况下实例化派生的内部类,只声明它的类型. 解决方法
您可以使用具有
self-type的特征来执行类似的操作.例如,假设我们有以下内容:
class Outer(val x: Int) { class Inner { def y = x } } 我们希望在没有外围的情况下向Inner添加一些功能: trait MyInner { this: Outer#Inner => def myDoubledY = this.y * 2 } 现在当我们实例化一个Inner时,我们可以在MyInner中混合: scala> val o = new Outer(21) o: Outer = Outer@72ee303f scala> val i = new o.Inner with MyInner i: o.Inner with MyInner = $anon$1@2c7e9758 scala> i.myDoubledY res0: Int = 42 这不是你想要的,而是接近. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- vim – 在非相邻拆分中打开Nerdtree文件
- 《数据结构》实验四 字符串和多维数组
- AngularJS:通过$resource使用数组类型参数发送请求(复选框
- twitter-bootstrap – 如何在Bootstrap Select中输入空格?
- Bootstrap文件(图片)上传插件File Input进阶使用说明
- 什么是Bash的\u0026\u0026和||的等效PowerShell操作
- fullcalendar”没有导出的成员’选项’.-在Angular中获取错
- Lua+Nginx+Memcached整合
- Bootstrap 滚动条
- 如何通过UNIX套接字配置Nginx proxy_pass Node.js HTTP服务