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等代码;
 
 
 

Rocket - config - Keys & Params的更多相关文章

  1. Rocket - config - implicit Parameters

    https://mp.weixin.qq.com/s/OH_Z1gdSUpfgM-tjx0OlrA   追溯配置信息的源头.   0. HasRocketCoreParameters   ​​ Has ...

  2. Rocket - config - Parameters

    https://mp.weixin.qq.com/s/uLEr9gAFaMDIXa8S9xJVTw   介绍配置类Parameters及其伴生对象的实现.   参考链接: https://docs.q ...

  3. Rocket - config - Configs

    https://mp.weixin.qq.com/s/z2gUYuYQAHQCa_5HZcBszw   介绍各个配置项的组织方式.   参考链接: https://docs.qq.com/sheet/ ...

  4. Rocket - config - DefaultConfig

    https://mp.weixin.qq.com/s/zWW00D0fb8h7_TotGD9YoQ   介绍DefaultConfig类的组成.     1. DefaultConfig   Defa ...

  5. Rocket - config - View

    https://mp.weixin.qq.com/s/b5o3s2DgqOz3-iK8FqPeLQ   介绍配置相关的基础类及其继承关系.   参考链接: https://github.com/fre ...

  6. URLSearchParams & shape URL params

    URLSearchParams https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams var paramsString = ...

  7. js封装包

    (function () { //check the class name , it will be replaced when existed if (window.IQCBase) { //ret ...

  8. angularJs的ui-router总结

    一:跑通ui-router. ui-router源码在最后面 跑通后的样子: 这个不解释了,都是很基本的东西. 二:切换视图: 这里的name可以不写,但是你得放到state的第一个参数里. 跑起来后 ...

  9. [Hapi.js] Request Validation with Joi

    hapi supports request validation out of the box using the joi module. Request path parameters, paylo ...

随机推荐

  1. 系统基础优化 vim

    系统基础优化 vim 1系统基础优化 (CPU-lscpu 内存-free 磁盘-df 负载-w/uptime) 1.1 系统基础优化 准备工作:如何查看系统的信息 (1)cat /etc/redha ...

  2. 海外网站如何通过代理IP进行采集?

    海外网站如何通过代理IP进行采集? 我们在做爬虫的时候,经常会遇到这种情况,爬虫最初运行的时候,数据是可以正常获取的,一切看起来都那么的美好,然而,不一会儿,就可能会出现403 Forbidden , ...

  3. Linux 通过终端命令行切换系统语言

    通过命令的形式修改系统的语言,比较详细的讲解了来龙去脉: 文章目录 0 前言 1 locale 文件 2 查找相关文件 3 解决方案 4 相关信息 4.1 locale属性的含义 4.2 LANGUA ...

  4. 一阶RC低通滤波器详解(仿真+matlab+C语言实现)

    文章目录 1 预备知识 2 simulink 仿真 3 simulink 运行结果 4 matlab实现 5 matlab运行结果 6 C语言实现 7 C语言运行结果 如果本文帮到了你,帮忙点个赞: ...

  5. spark on yarn安装

    网上关于spark的安装说明很多了,这里就以spark  pre-build with user provided hadoop 安装包为例讲解, 下载spark  pre-build with us ...

  6. 移动端H5支付(微信和支付宝)

    我们直接进入主题吧,先说功能: 1.用户通过我们的页面输入充值帐号和金额调起支付(微信或者支付宝),支付成功返回获取支付结果. 2.微信支付成功后重定向到指定页面(没有设置重定向地址的话,默认返回调起 ...

  7. 单片机之静态局部变量static

    HL-1慧静电子 上程序: main.c #include <reg52.h>#include "Timer.h" /********P1口低有效*********** ...

  8. 排序算法:图解快速排序算法--不超过18行代码Python和JavaScript实现快速排序算法

    快速排序有三大要素 分别是 第一:找基准值--key 第二:分区 第三:比较数字大小 先来看下快速排序流程: 基准值key选取了第一个元素78 基准值是可以任意一个元素 因为选择了最左边的数据,那么就 ...

  9. 02JAVA基础-运算符及选择语句

    一.运算符 1.算数运算符 算数运算符 备注 + 可以用作拼接 - * / 整数相除得整数,需要获得小数,需一方为浮点数 % 取余数 ++ 自增 -- 自减 扩展(1) 对于++和--的扩展(以++为 ...

  10. DRF视图组件

    DRF视图组件: CVB模式继承----五层 from django.views import View # Django的View from rest_framework.views import ...