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. C. Ilya And The Tree 树形dp 暴力

    C. Ilya And The Tree 写法还是比较容易想到,但是这么暴力的写法不是那么的敢写. 就直接枚举了每一个点上面的点的所有的情况,对于这个点不放进去特判一下,然后排序去重提高效率. 注意d ...

  2. Spring Cloud 学习 之 Spring Cloud Ribbon(基础知识铺垫)

    文章目录 1.负载均衡: 2.RestTemplate详解: xxxForEntity/xxxForObject:主要介绍get跟post exchange: execute源码分析: 1.负载均衡: ...

  3. mac下xampp使用phpmyadmin搭建后台

    情景 使用xampp搭建一个后端环境,前提已经有后端和数据库配置文件 安装和启动xampp 安装xampp没什么可说的,在https://www.apachefriends.org/index.htm ...

  4. search(11)- elastic4s-模糊查询

    很多时候搜索用户对查询语句具有模糊感觉,他们只能提供大约的描述.比如一个语句的部分,或者字句顺序颠倒等.通过模糊查询可以帮助用户更准确的找出他们希望搜索的结果. 模糊查询包括前后缀,语句(phrase ...

  5. 【Hadoop离线基础总结】Hue的简单介绍和安装部署

    目录 Hue的简单介绍 概述 核心功能 安装部署 下载Hue的压缩包并上传到linux解压 编译安装启动 启动Hue进程 hue与其他框架的集成 Hue与Hadoop集成 Hue与Hive集成 Hue ...

  6. 一文教你快速修改ubuntu终端显示的主机名和用户名

    为了让终端的显示更加简洁,清爽,改掉显示的用户名和主机名,改成你喜欢的名字. 创作不易,如果本文帮到了您: 如果本文帮到了您,请帮忙点个赞

  7. 阿里巴巴泰山版《Java 开发者手册》,也是一份防坑指南

    我是风筝,公众号「古时的风筝」,一个不只有技术的技术公众号,一个在程序圈混迹多年,主业 Java,另外 Python.React 也玩儿的 6 的斜杠开发者. Spring Cloud 系列文章已经完 ...

  8. 在Qsys中创建用户自定义IP

    在SOC FPGA的设计中,必须使用Qsys软件才能将ARM和FPGA之间的接口引入到FPGA设计中.为了设计上的方便,客户经常希望将Qsys中的一些接口信号引入到FPGA顶层设计文件中.本文以Ava ...

  9. [hdu5372 Segment Game]树状数组

    题意:有两种操作:(1)插入线段,第i次插入的线段左边界为Li,长度为i (2)删除线段,删除第x次插入的线段.每次插入线段之前询问有多少条线段被它覆盖. 思路:由于插入的线段长度是递增的,所以第i次 ...

  10. markdown:列表、表格、代码实现

    插入列表 1. dsf2. dsds 插入表格header 1 | header 2---|---row 1 col 1 | row 1 col 2row 2 col 1 | row 2 col 2 ...