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等代码;
     
     
     
  • 相关阅读:
    使用NBU进行oracle异机恢复
    mycat偶尔会出现JVM报错double free or corruption并崩溃退出
    exp导出数据时丢表
    service_names配置不正确,导致dg创建失败
    XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax
    HTTP协议简介详解 HTTP协议发展 原理 请求方法 响应状态码 请求头 请求首部 java模拟浏览器客户端服务端
    java集合框架容器 java框架层级 继承图结构 集合框架的抽象类 集合框架主要实现类
    【JAVA集合框架一 】java集合框架官方介绍 Collections Framework Overview 集合框架总览 翻译 javase8 集合官方文档中文版
    java内部类深入详解 内部类的分类 特点 定义方式 使用
    再谈包访问权限 子类为何不能使用父类protected方法
  • 原文地址:https://www.cnblogs.com/wjcdx/p/10356263.html
Copyright © 2011-2022 走看看