国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

lodash源碼分析之緩存使用方式的進(jìn)一步封裝

wapeyang / 3190人閱讀

摘要:但是在類中,要初始化緩存和設(shè)置緩存都需要提供和組成的二維數(shù)組,因此在類中,提供了一種更方便的緩存設(shè)置方式,只需要提供緩存的值即可。這里構(gòu)造函數(shù)不需要再傳入的二維數(shù)組了,只需要傳入包含所有緩存值的數(shù)組即可。

在世界上所有的民族之中,支配著他們的喜怒選擇的并不是天性,而是他們的觀點(diǎn)。

——盧梭《社會(huì)與契約論》

本文為讀 lodash 源碼的第九篇,后續(xù)文章會(huì)更新到這個(gè)倉(cāng)庫(kù)中,歡迎 star:pocket-lodash

gitbook也會(huì)同步倉(cāng)庫(kù)的更新,gitbook地址:pocket-lodash

前言

在之前的《lodash源碼分析之Hash緩存》和《lodash源碼分析之List緩存》介紹過 lodash 的兩種緩存方式,在《lodash源碼分析之緩存方式的選擇》中介紹過這兩種緩存方式和 Map 的封裝,lodash 會(huì)根據(jù)緩存類型來(lái)選擇最優(yōu)的緩存方式。

但是在 MapCache 類中,要初始化緩存和設(shè)置緩存都需要提供 keyvalue 組成的二維數(shù)組,因此在 SetCache 類中,lodash 提供了一種更方便的緩存設(shè)置方式,只需要提供緩存的值即可。

依賴
import MapCache from "./MapCache.js"

lodash源碼分析之緩存方式的選擇

源碼分析
const HASH_UNDEFINED = "__lodash_hash_undefined__"

class SetCache {

  constructor(values) {
    let index = -1
    const length = values == null ? 0 : values.length

    this.__data__ = new MapCache
    while (++index < length) {
      this.add(values[index])
    }
  }

  add(value) {
    this.__data__.set(value, HASH_UNDEFINED)
    return this
  }

  has(value) {
    return this.__data__.has(value)
  }
}

SetCache.prototype.push = SetCache.prototype.add
總體思路

從源碼中可以看到,SetCache 其實(shí)調(diào)用的是 MapCache 類,使用緩存的值作為 key ,所有的 key 對(duì)應(yīng)的值都是 lodash 定義的標(biāo)準(zhǔn) undefinedHASH_UNDEFINED ,正如之前文章中論述過的,這個(gè)值用于 Hash 緩存時(shí),避免判斷是緩存是否存在時(shí)出錯(cuò)。

判斷緩存是否存在,只需要判斷 MapCache 是否存在對(duì)應(yīng)的 key

constructor
constructor(values) {
  let index = -1
  const length = values == null ? 0 : values.length

  this.__data__ = new MapCache
  while (++index < length) {
    this.add(values[index])
  }
}

這里構(gòu)造函數(shù)不需要再傳入 key-value 的二維數(shù)組了,只需要傳入包含所有緩存值的數(shù)組即可。

__data__ 屬性保存的其實(shí)是 MapCache 的實(shí)例。

初始化時(shí)只需要遍歷需要緩存的數(shù)組 values ,然后調(diào)用 add 方法,設(shè)置緩存即可。

add
add(value) {
  this.__data__.set(value, HASH_UNDEFINED)
  return this
}

add 方法用來(lái)設(shè)置緩存。

其實(shí)調(diào)用的是 MapCahce 實(shí)例的 set 方法,使用緩存值 value 作為 key ,用 HASH_UNDEFINED 作為緩存值。

### has

has(value) {
  return this.__data__.has(value)
}

has 方法用于判斷緩存是否存在。

只需要調(diào)用 MapCache 實(shí)例的 has 方法即可。

push
SetCache.prototype.push = SetCache.prototype.add

push 方法只是 add 方法的別名。

License

署名-非商業(yè)性使用-禁止演繹 4.0 國(guó)際 (CC BY-NC-ND 4.0)

最后,所有文章都會(huì)同步發(fā)送到微信公眾號(hào)上,歡迎關(guān)注,歡迎提意見:

作者:對(duì)角另一面

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/107028.html

相關(guān)文章

  • lodash源碼分析緩存使用方式進(jìn)一步封裝

    摘要:但是在類中,要初始化緩存和設(shè)置緩存都需要提供和組成的二維數(shù)組,因此在類中,提供了一種更方便的緩存設(shè)置方式,只需要提供緩存的值即可。這里構(gòu)造函數(shù)不需要再傳入的二維數(shù)組了,只需要傳入包含所有緩存值的數(shù)組即可。 在世界上所有的民族之中,支配著他們的喜怒選擇的并不是天性,而是他們的觀點(diǎn)。——盧梭《社會(huì)與契約論》 本文為讀 lodash 源碼的第九篇,后續(xù)文章會(huì)更新到這個(gè)倉(cāng)庫(kù)中,歡迎 star...

    neroneroffy 評(píng)論0 收藏0
  • lodash源碼分析數(shù)組差集

    摘要:依賴源碼分析之緩存使用方式的進(jìn)一步封裝源碼分析之源碼分析之源碼分析之的實(shí)現(xiàn)源碼分析之源碼分析的調(diào)用如果有傳遞,則先調(diào)用,使用生成要比較數(shù)組的映射數(shù)組。循環(huán)完畢,沒有在第二個(gè)數(shù)組中發(fā)現(xiàn)相同的項(xiàng)時(shí),將該項(xiàng)存入數(shù)組中。 外部世界那些破舊與貧困的樣子,可以使我內(nèi)心世界得到平衡。——卡爾維諾《煙云》 本文為讀 lodash 源碼的第十七篇,后續(xù)文章會(huì)更新到這個(gè)倉(cāng)庫(kù)中,歡迎 star:pocke...

    Noodles 評(píng)論0 收藏0
  • lodash源碼分析緩存方式選擇

    摘要:接口設(shè)計(jì)同樣實(shí)現(xiàn)了跟一致的數(shù)據(jù)管理接口,如下依賴源碼分析之緩存源碼分析之緩存源碼分析是否使用這個(gè)函數(shù)用來(lái)判斷是否使用緩存。返回表示使用緩存,返回則使用或者緩存。獲取對(duì)應(yīng)緩存方式的實(shí)例這個(gè)函數(shù)根據(jù)來(lái)獲取儲(chǔ)存了該的緩存實(shí)例。 每個(gè)人心里都有一團(tuán)火,路過的人只看到煙。——《至愛梵高·星空之謎》 本文為讀 lodash 源碼的第八篇,后續(xù)文章會(huì)更新到這個(gè)倉(cāng)庫(kù)中,歡迎 star:pocket-...

    HitenDev 評(píng)論0 收藏0
  • lodash源碼分析緩存方式選擇

    摘要:接口設(shè)計(jì)同樣實(shí)現(xiàn)了跟一致的數(shù)據(jù)管理接口,如下依賴源碼分析之緩存源碼分析之緩存源碼分析是否使用這個(gè)函數(shù)用來(lái)判斷是否使用緩存。返回表示使用緩存,返回則使用或者緩存。獲取對(duì)應(yīng)緩存方式的實(shí)例這個(gè)函數(shù)根據(jù)來(lái)獲取儲(chǔ)存了該的緩存實(shí)例。 每個(gè)人心里都有一團(tuán)火,路過的人只看到煙。——《至愛梵高·星空之謎》 本文為讀 lodash 源碼的第八篇,后續(xù)文章會(huì)更新到這個(gè)倉(cāng)庫(kù)中,歡迎 star:pocket-...

    AdolphLWQ 評(píng)論0 收藏0
  • lodash源碼分析Hash緩存

    摘要:只接收一個(gè)二維數(shù)組作為參數(shù),調(diào)用方式如下其中子項(xiàng)中的第一項(xiàng)會(huì)作為,第二項(xiàng)是需要緩存的值。實(shí)例化的結(jié)果如下緩存的數(shù)量?jī)?chǔ)存在的對(duì)象中。的作用是清空緩存,因此需要將重置為。將緩存的數(shù)據(jù)設(shè)置為空對(duì)象。因?yàn)樵诰彺嬷惺且詠?lái)表示的,因此遇到值為時(shí),返回。 在那小小的夢(mèng)的暖閣,我為你收藏起整個(gè)季節(jié)的煙雨。——洛夫《靈河》 本文為讀 lodash 源碼的第四篇,后續(xù)文章會(huì)更新到這個(gè)倉(cāng)庫(kù)中,歡迎 sta...

    cartoon 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<