gpt4 book ai didi

scala - `extends` 允许调用特征中的父类(super class)型方法,但不允许自身类型

转载 作者:行者123 更新时间:2023-12-05 01:04:51 24 4
gpt4 key购买 nike

考虑:

trait SuperBar { def superBarMethod = ??? }
trait Bar extends SuperBar

trait FooWithSelfType { this: Bar =>
super.superBarMethod // error: value superBarMethod is not a member of AnyRef
}

trait FooWithExtends extends Bar {
super.superBarMethod
}

这种限制是由于某些底层实现的缺陷造成的,还是出于某种原因实际上是这样设计的?

我的看法是,如果 this已知类型为 Bar , 和 Bar已知是 SuperBar 的亚型,然后调用任何 SuperBar this 上的方法应该被允许。

最佳答案

FooWithSelfType可能知道它是Bar ,但它实际上不是 FooWithSelfType 的一部分的继承层次结构,因此它无权访问 super除了 super这是其继承层次结构的明确一部分。如果你有

trait Baz extends SuperBaz { this : Bar => 
/* ... */
}

你怎么知道什么 super如果两者都指的是 SuperBazSuperBar是可能性吗?

关于scala - `extends` 允许调用特征中的父类(super class)型方法,但不允许自身类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22413972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com