• 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等代码;
     
     
     
  • 相关阅读:
    文档API
    vi编辑器常用方法
    storm实战入门一
    redis教程
    为redis分配一个新的端口
    Lucene分页查询
    Lucene搜索方式大合集
    HBase Scan类用法
    java.util.Queue用法
    Makefile中预定义变量
  • 原文地址:https://www.cnblogs.com/wjcdx/p/10356263.html
Copyright © 2020-2023  润新知