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

 
介绍各个配置项的组织方式。
 
参考链接:
 
 
1. Parameters的chain方法
 
chain方法用于实现find方法,即查找逻辑:
其使用链式查找的方法,逐个查找各个配置,直到查到所查的key。
 
chain方法所属对象(this)、三个参数,标识着配置链表的不同位置、要查找的key:
a. pname:要查找的Key;
b. site: 整个配置链表;
c. this:当前正在查找的配置项;
d. tail: 配置链表中this配置项之后的配置项;
 
 
2. PartialParameters的chain方法
 
PartialParameters中chain方法的实现如下:
 
其函数成员f使用的参数,就是当前的查找上下文。如下:
a. site: 整个配置链表;
b. this:当前正在查找的配置项;
c. tail: 配置链表中this配置项之后的配置项;
 
 
3. Config的第二个构造方法
 
 
第二个构造方法(secondary constructor),根据传入的参数f,生成一个PartialParameters,然后作为参数调用第一个构造方法(primary constructor)。
 
 
4. 实例
 
 
BaseSubsystemConfig继承自Config类,实例化时调用Config的第二个构造方法。
 
这里的(site, here, up)是形式参数,实际调用时的参数在PartialParameters类中传入,为(site, this, tail)。意义如下:
a. site/site: 整个配置链表;
b. this/here:当前正在查找的配置项;
c. tail/up: 配置链表中this配置项之后的配置项;
 
 
5. 配置项之间的依赖关系
 
某一个配置项可能依赖于其他配置项的值,如BaseSubsystemConfig中的PgLevels依赖于XLen:
 
获取所依赖配置值的方式就是通过site进行查找,也就是在整个配置链表中进行查找。
 
 
6. 配置项之间的覆盖关系
 
1) 因为查找是链式的,所以如果两个配置项含有同一个key,那么排在前面的key的值就会被使用。
 
如DefaultRV32Config:
 
WithRV32中也定义了XLen这个配置项,他排在BaseSubsystemConfig中的XLen之前。所以针对DefaultRV32Config的实例使用site(XLen)时,获取到的是32,而不是64。
 
2) 排在前面的配置项也可以使用排在后面的配置项的值,并对其进行更改。
 
同样如DefaultRV32Config。
 
WithRV32中的配置项RocketTilesKey,使用up(RocketTilesKey, site)查找配置链表中后续配置项中的RocketTilesKey,并对其进行修改。
 
这里是可以查找到的,因为DefaultConfig中也定义了RocketTilesKey这个配置项。
 
 
7. Config的子类们
 
如下链接整理并列出了所有Config的子类:
 

Rocket - config - Configs的更多相关文章

  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 - Keys & Params

    https://mp.weixin.qq.com/s/Y42EWrO7IoHRD_yHD4iRLA   介绍配置项.配置值以及他们的使用方式.   参考链接: https://docs.qq.com/ ...

  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. Spring MVC 的 Java Config ( 非 XML ) 配置方式

    索引: 开源Spring解决方案--lm.solution 参看代码 GitHub: solution/pom.xml web/pom.xml web.xml WebInitializer.java ...

  7. web appbuilder 正式版用yo esri-appbuilder-js:widget生成widget读取不到config解决方案

           对于在webappBuilder正式版中,如果用yo esri-appbuilder-js:widget生成的widget,在写widget的时候widget里面的config.json ...

  8. 关于docker容器是怎样建立新的namespace的。

    最近博客收到了一封交流的私信,感谢您的关注:现在就我理解的docker建立容器时namespace的建立问题做一个 个人的回答: 一,从原理角度来讲: docker创建container,说白了就是l ...

  9. Method Swizzling和AOP(面向切面编程)实践

    Method Swizzling和AOP(面向切面编程)实践 参考: http://www.cocoachina.com/ios/20150120/10959.html 上一篇介绍了 Objectiv ...

随机推荐

  1. 简单ajax跨域请求

    最近遇到需要ajax跨域的需求 首先看下不做任何处理特别处理的ajax跨域请求会出现什么样的错误 客户端代码: <script type="text/javascript"& ...

  2. java23种设计模式——泡MM版

    一.创建型模式 1.FACTORY:追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,固然口味有所不同,但不管你带MM往麦当劳或肯德基,只管向服务员说;来四个鸡翅就行了.麦当劳和肯德 ...

  3. 【HBase】通过Bulkload批量加载数据到Hbase表中

    目录 需求 步骤 一.开发MapReduce 二.打成Jar包放到linux执行 三.有两种办法将HFile文件加载到HBase表中 开发代码 Hadoop命令运行 需求 将hdfs上面的这个路径 / ...

  4. MATLAB1127(传递函数)

    sys=tf(400,[1,50,0]) sys = 400 ---------- s^2 + 50 s 其中,tf()函数的用法.   传递函数 dsys=c2d(sys,ts,'z') dsys ...

  5. 使用IDEA远程向伪分布式搭建的Hadoop提交MapReduce作业

    环境 VirtualBox 6.1 IntelliJ IDEA 2020.1.1 Ubuntu-18.04.4-live-server-amd64 jdk-8u251-linux-x64 hadoop ...

  6. python--正则表达式中(.)(*)(.*?)以及re.S的认识

    https://yiyibooks.cn/xx/python_352/library/re.html 看command: #-*-coding:gb2312-*- __author__ = 'fuda ...

  7. 我的linux学习日记day2

    RPM  软件包管理器 目的:降低软件安装难度原理 :将软件源代码加上一套安装规则打包到一起,用户只需要运行RPM systemctl start 服务名称 开启服务systemctl stop 服务 ...

  8. 仅需60秒,使用k3sup快速部署高可用K3s集群

    作者简介 Dmitriy Akulov,连续创业者,16岁时搭建了开源CDN公共服务jsDelivr的v1版本.目前是边缘托管平台appfleet创始人. 原文链接: https://ma.ttias ...

  9. centos6 升级gcc 无法识别的命令行选项“-std=gnu++1y”的解决办法

    npm install 提示: 1.下载源文件,并安装: wget http://people.centos.org/tru/devtools-2/devtools-2.repo mv devtool ...

  10. 「雕爷学编程」Arduino动手做(7)——旋转电位器模块

    37款传感器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备逐一做做实验 ...