第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Ramda:記住并使用價(jià)值

Ramda:記住并使用價(jià)值

收到一只叮咚 2022-10-08 17:19:03
我正在嘗試“Ramdafy”一個(gè)功能并使其無(wú)點(diǎn)。這是我走了多遠(yuǎn):const hasFetchedForFilterQueryString = state => {  const filterQueryString = getFilterQueryString(state);  return either(    pipe(getPages, has(filterQueryString)),    pipe(getNewlyLoadedUsers, has(filterQueryString)),  )(state);};// orconst hasFetchedForFilterQueryString = state =>  either(    pipe(getPages, has(getFilterQueryString(state))),    pipe(getNewlyLoadedUsers, has(getFilterQueryString(state))),  )(state);我想知道是否有一種方法可以編寫(xiě)更多的無(wú)點(diǎn),因此無(wú)需保存filterQueryString變量并且必須手動(dòng)應(yīng)用state?
查看完整描述

1 回答

?
BIG陽(yáng)

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊

我通常同意Bergi的評(píng)論。無(wú)點(diǎn)不應(yīng)該是一個(gè)目標(biāo)。當(dāng)我開(kāi)始編寫(xiě) Ramda 時(shí),我就迷上了它,其中有許多功能旨在幫助使事情變得無(wú)意義。我很少再推薦他們了。我不認(rèn)為useWith或者converge經(jīng)常使函數(shù)更易于閱讀或維護(hù)。

但是有一個(gè)函數(shù),lift,在 FP 世界中廣為人知,在這里很有幫助。我認(rèn)為是lift將功能從價(jià)值領(lǐng)域提升到這些價(jià)值的容器領(lǐng)域。因此lift (add) (Maybe(3), Maybe(5)) //=> Maybe(8)。當(dāng)與產(chǎn)生我們的值的函數(shù)一起使用時(shí),它可能會(huì)像這樣工作:

lift ((a, b) => a + b) (

  n => n * 2, 

  n => n - 1

) (5) 

//=> (5 * 2) + (5 -1) //=> 14`.

這正是您想要對(duì)您的功能做的事情。所以這是一個(gè)lift基于 - 的無(wú)點(diǎn)版本:


const hfffqs2 = either (

  lift (has) (getFilterQueryString, getPages),

  lift (has) (getFilterQueryString, getNewlyLoadedUsers)

)

我發(fā)現(xiàn)這比您上面的任何一個(gè)版本都更具可讀性。


我認(rèn)為該版本可與我能想到的最簡(jiǎn)單的非 Ramda 版本相媲美:


const hfffqs3 = state => {

  const query = getFilterQueryString(state);

  return query in getPages(state)

      || query in getNewlyLoadedUsers(state)

}

不過(guò),它不一定更具可讀性。而且它的效率較低——除了額外的函數(shù)調(diào)用——它必須調(diào)用getFilterQueryString兩次。但它是一個(gè)可讀和可維護(hù)的功能。


如果lift還不是很清楚,中間格式可能如下所示:


const hfffqs1 = either (

  state => has(getFilterQueryString(state), getPages(state)),

  state => has(getFilterQueryString(state), getNewlyLoadedUsers(state))

)

通過(guò)應(yīng)用getFilterQueryStringand getState,lift (has)我們得到state => has(getFilterQueryString(state), getPages(state)), 和下一行的等價(jià)物。我們已經(jīng)將函數(shù)從字符串和對(duì)象領(lǐng)域提升到返回字符串和對(duì)象的函數(shù)領(lǐng)域。我們可以傳遞給這兩個(gè)函數(shù)來(lái)獲取一個(gè)字符串和一個(gè)對(duì)象。hasstate


您可以在以下代碼段中看到這些操作:


// Dummy implementations just for demo.  `state` is a small integer.

const getFilterQueryString = (state) => ['foo', 'bar', 'baz', 'qux', 'corge', 'grault'][state]

const getPages = (state) => [{foo: 1, bar: 2}, {foo: 1, corge: 2, grault: 3}, {baz: 1}, {foo: 1, grault: 2}, {corge: 1, baz: 2}, {bar: 1, qux: 2}][state]

const getNewlyLoadedUsers = (state) => [{baz: 1, qux: 2}, {corge: 1, grault: 2}, {foo: 1, corge: 2}, {baz: 1, qux: 2}, {foo: 1, qux: 2}, {bar: 1, corge: 2}][state]


const hasFetchedForFilterQueryString = state => {

  const filterQueryString = getFilterQueryString(state);

  return either(

    pipe(getPages, has(filterQueryString)),

    pipe(getNewlyLoadedUsers, has(filterQueryString)),

  )(state);

};


console .log ([0, 1, 2, 3, 4, 5].map(hasFetchedForFilterQueryString))


const hfffqs1 = either (

  state => has(getFilterQueryString(state), getPages(state)),

  state => has(getFilterQueryString(state), getNewlyLoadedUsers(state))

)


console .log ([0, 1, 2, 3, 4, 5].map(hfffqs1))


const hfffqs2 = either (

  lift (has) (getFilterQueryString, getPages),

  lift (has) (getFilterQueryString, getNewlyLoadedUsers)

)


console .log ([0, 1, 2, 3, 4, 5].map(hfffqs2))


const hfffqs3 = state => {

  const query = getFilterQueryString(state);

  return query in getPages(state)

      || query in getNewlyLoadedUsers(state)

}


console .log ([0, 1, 2, 3, 4, 5].map(hfffqs3))

.as-console-wrapper {min-height: 100% !important; top: 0}

<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.27.0/ramda.js"></script>

<script> const {either, pipe, has, lift} = R                         </script>


查看完整回答
反對(duì) 回復(fù) 2022-10-08
  • 1 回答
  • 0 關(guān)注
  • 175 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)