1. 程式人生 > >Rocket - config - Keys & Params

Rocket - config - Keys & Params

intellij 參數 clas 實現 向上 又是 doc c99 com

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

介紹配置項、配置值以及他們的使用方式。 參考鏈接: https://docs.qq.com/sheet/DUUR6ZkpPRFlncXVQ 1. Keys & Params 所有的配置項、配置值整理成表格,如鏈接中的表格: https://docs.qq.com/sheet/DUUR6ZkpPRFlncXVQ ?技術分享圖片? 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