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

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

Javascript管道函數(shù) - 為什么所有標(biāo)準(zhǔn)實(shí)現(xiàn)都返回一個(gè)帶參數(shù)的函數(shù)

Javascript管道函數(shù) - 為什么所有標(biāo)準(zhǔn)實(shí)現(xiàn)都返回一個(gè)帶參數(shù)的函數(shù)

躍然一笑 2022-05-26 14:54:01
我在javascript中看到了很多管道的實(shí)現(xiàn)。所有這些都是以函數(shù)式編程方式編寫的,從一個(gè)函數(shù)開始,該函數(shù)將所有fns要通過管道傳輸?shù)淖鳛閰?shù),然后返回一個(gè)函數(shù),該函數(shù)將參數(shù)傳遞給第一個(gè)函數(shù)。然后,此返回的函數(shù)負(fù)責(zé)將fns.像這樣的東西:pipe = (...fns) => (x) => fns.reduce((v, f) => f(v), x);以確實(shí)需要返回一個(gè)函數(shù)并且可以只在其參數(shù)中獲取參數(shù)的方式編寫此函數(shù)是否有任何問題:pipe = (x, ...fns) => fns.reduce((v, f) => f(v), x);他們兩個(gè)工作一樣嗎?這個(gè)比那個(gè)好嗎 ?
查看完整描述

2 回答

?
一只萌萌小番薯

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

第一種方法更通用,因此可能更有用??紤]您希望在多個(gè)輸入上調(diào)用一些管道函數(shù)的情況,而不僅僅是一個(gè):


const pipe = (x, ...fns) => fns.reduce((v, f) => f(v), x);

console.log(

  pipe(1, x => x + 2, x => x * 2),

  pipe(3, x => x + 2, x => x * 2),

);

太丑了 高階函數(shù)可以讓您編寫更少重復(fù)的代碼:


const pipe = (...fns) => x => fns.reduce((v, f) => f(v), x);

const changeNum = pipe(x => x + 2, x => x * 2);

console.log(

  changeNum(1),

  changeNum(3),

);

如果您處于不必多次調(diào)用管道函數(shù)的情況下,那么一種方法相對(duì)于另一種方法并沒有太多具體的好處(也許,對(duì)于參數(shù)輸入 - 具有相同的參數(shù),例如...fns, 可能被認(rèn)為比混合表示根本不同事物的參數(shù)更優(yōu)雅,例如(x, ...fns))。


也就是說,不必考慮您所處的情況會(huì)更容易,在這種情況下,無論如何標(biāo)準(zhǔn)pipe功能(...fns) => x =>是更可取的,因?yàn)樗鼘?duì)于所有情況都足夠靈活,與替代方案不同。


查看完整回答
反對(duì) 回復(fù) 2022-05-26
?
幕布斯7119047

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

給定curry = f => x => y => f(x, y)并且uncurry = f => (x, y) => f(x) (y)它們是相同的,即您可以將一種形式轉(zhuǎn)換為另一種形式,反之亦然(忽略其余參數(shù))。


但問題是,為什么您首先要為自己的功能帶來負(fù)擔(dān)?為什么函數(shù)的數(shù)量完全不同?如果每個(gè)函數(shù)只接受一個(gè)參數(shù),它們的 API 將被簡化,我們可以將它們結(jié)合起來,限制更少:


const fold = f => acc => xs => xs.reduce((acc, x) => f(acc) (x));

const pipe = g => f => x => f(g(x));

const flip = f => y => x => f(x) (y);

const id = x => x;


const pipen = fold(pipe) (id);

const comp = flip(pipe);

const compBin = comp(comp) (comp);

const compBin3 = compBin(compBin) (compBin);


const inc = x => x + 1;

const sqr = x => x * x;

const add = x => y => x + y;


console.log(

  "pipen",

  pipen([inc, inc, inc, inc, sqr]) (1)); // 25


console.log(

  "compBin",

  compBin(add) (add) (2) (3) (4)); // 9

  

console.log(

  "compBin3",

  compBin3(add) (add) (add) (2) (3) (4) (5)); // 14

沒有人會(huì)定義compcompBin我做的方式。它應(yīng)該只是說明可能性。



查看完整回答
反對(duì) 回復(fù) 2022-05-26
  • 2 回答
  • 0 關(guān)注
  • 136 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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