zoukankan      html  css  js  c++  java
  • Rocket

    https://mp.weixin.qq.com/s/Y42EWrO7IoHRD_yHD4iRLA

     
    介绍配置项、配置值以及他们的使用方式。
     
    参考链接:
     
     
    1. Keys & Params
     
    所有的配置项、配置值整理成表格,如链接中的表格:
     
     
     
    2. BootROMParams
     
    BootROMParams既是配置项的Key(object BootROMParams),又是配置项的值的类型(class BootROMParams)。
     
    这里主要介绍Intellij IDEA中一个不经意的细节。
     
    如下图,当把光标定位到class后面的BootROMParams时,Field[BootROMParams]中的BootROMParams自动背景高亮。
     
    当把光标定位到object后面的BootROMParams时,其他两处BootROMParams背景并不会高亮:
     
    当Ctrl+F搜索BootROMParams时,三处都会高亮,这说明三处文本是一样的:
     
    那为什么光标定位时没有一同背景高亮呢?
     
    原因在于Intellij IDEA不只是简单的匹配文本,而是区分了他们的类型:
    a. 两处class BootROMParams同时高亮;
    b. 一处object BootROMParams单独高亮;
    c. Ctrl+F搜索文本时则是文本匹配,三处同时高亮;
     
     
    3. trait CoreParams
     
     
    CoreParams定义了Cpu核(core)的参数。它是一个抽象的特征(traint),没有具体的值。
    相当于从规范中提取出可变的参数,需要在实现时确定各个参数的值。
     
     
    4. class RocketCoreParams
     
    实现Rocket核时使用的参数,包括在CoreParams的基础上新增的参数。
    RocketCoreParams是一个类(class),包含了各个参数的默认值:
    其中,每一行前带向上箭头的为从CoreParams中继承的属性;不带向上箭头的为新定义的参数。
     
     
    5. trait HasCoreParameters
     
    所谓Has,是指该trait中有CoreParams。CoreParams中定义了核的参数。HasCoreParameters则用于混入(mixin),其他需要使用CoreParams的模块混入HasCoreParameters以获取相关参数的值。
     
    相较于HasRocketCoreParameters代表具体的实现参数,HasCoreParameters代表规范中定义的参数,更具一般性和通用性。所以其他模块多使用HasCoreParameters获取核参数。
     
     
    不过,在实际实例化时,HasCoreParameters中的coreParams可能引用的是RocketCoreParams的实例。
     
    可以看到,这里把tileParams.core转换为类型RocketCoreParams的实例rocketParams。
     
     
    6. trait HasTileParameters
     
     
    1) HasTileParameters是HasCoreParameters的父trait;
     
    2) HasTileParameters中为了方便获取CoreParams中的参数,定义了一组方法:
     
    3) CoreParams的实例core定义于TileParams中,其实例tileParams通过implicit Parameters p获取:
     
    4) p是HasTileParameters的数据成员,所以其子类HasCoreParameters,以及HasCoreParameters的子类,都可以使用p(key)来获取配置项的值。
     
    5) p是HasTileParameters的一个抽象成员,其并不在HasTileParameters中实现:
     
    6) p是一个implicit数据成员,可以在当前范围(scope)内通过隐式规则查找Parameters类型的变量,用这个变量充当p。
     
    7) Has是出于混入的目的,那么这个p应该是在被混入的类的范围中提供:
     
    这里的implicit Parameters p参数即是在当前范围内可以找到的Parameters变量,HasTileParameters中的p通过隐式规则查找后即可引用这个变量。
     
    再如:
     
     
    7. trait: this match(Self Type)
     
    如下trait的非标准形式定义令人费解:
     
    他的用意在于使这个triat只能被InstanceId的子类型混入(mixin)。
     
    实现的手法是在实例化时对this的类型做匹配,如果this的类型是InstanceId则执行后续trait定义体内的代码,如果不是则不执行,也就没有后续代码中定义的数据和方法成员。
     
    比如:class A extends Object with HasBtbParameters;
    当实例化A时:var a = new A;会首先执行其父类的构造方法,当执行到HasBtbParameters的类型构造方法时,先对this做匹配,因为他的类型不是InstanceId,所以不再执行后续的val btbParams等代码;
     
     
     
  • 相关阅读:
    使用C#实现DHT磁力搜索的BT种子后端管理程序+数据库设计(开源)
    便携版WinSCP在命令行下同步文件夹
    ffmpeg (ffprobe)分析文件关键帧时间点
    sqlite删除数据或者表后,回收数据库文件大小
    ubuntu 20.04下 freeswitch 配合 fail2ban 防恶意访问
    ffmpeg使用nvenc编码的结论记录
    PC版跑跑卡丁车 故事模式 亚瑟传说章节 卡美洛庆典 2阶段 心灵之眼 攻略
    There was an error loading or playing the video
    Nvidia RTX Voice 启动报错修复方法
    火狐浏览器 关闭跨域限制
  • 原文地址:https://www.cnblogs.com/wjcdx/p/10356263.html
Copyright © 2011-2022 走看看