scala - 通用“嵌套成员”特征
问题描述
我正在构建一个由多个特征组成的类,其中一个提供了包含该类“成员”列表的能力:
trait WithNestedMembers[T] {
val members = new scala.collection.mutable.ListBuffer[T]
}
class MainClass extends WithNestedMembers[MainClass] {
// ...
}
这似乎工作正常。
现在,我想在其他特征中使用“嵌套”功能:
trait NestingUser {
this: WithNestedMembers[NestingUser] =>
var nestedValue = 0
def sumNested = nestedValue + members.map(_.nestedValue).sum
}
该定义本身似乎可以正常工作。但是,我不能将其用作MainClass
. 以下给出了错误:
class MainClass extends WithNestedMembers[MainClass] with NestingUser {
// Illegal inheritance, self-type MainClass does not conform to WithNestedMembers[NestingUser]
}
我怀疑我需要在某处使用某种类型的界限,以解释这对于 require 来说WithNestedMembers[MainClass]
已经足够了WithNestedMembers[NestingUser]
。但是哪里?
解决方案
尝试与这样的T
协变+T
trait WithNestedMembers[+T] {
val members = List.empty[T]
}
推荐阅读
- macos - 如何启用/禁用聚合 CoreAudio 设备的输入或输出通道?
- laravel - 我收到错误没有为 diglactic 面包屑插件的错误定义提示路径?
- awk - 如果两个字符串在多行中,则只打印一次
- angular - 我如何以 IONIC 角度将 H3 标签的数据发送到我的组件
- git - 如何找到 git 进程挂起和终止
- python-3.x - ColumnTransformer 对象没有属性形状错误
- azure - Azure webapp 安全组访问
- java - 调用 glClear(GL_COLOR_BUFFER_BIT) 后 JOGL glDrawArrays 不起作用
- r - 来自 API in Loop for R 的分页响应
- google-apps-script - 如何获取谷歌应用脚本的最后执行时间?