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

資訊專欄INFORMATION COLUMN

【30秒一個知識點】Adapter

鄒立鵬 / 2328人閱讀

摘要:給定一個函數,返回一個閉包,該閉包將所有輸入收集到一個數組接受函數中。返回一個可變參數的閉包,在應用其他參數前,先把第一個以外的其他參數作為第一個參數。

本系列翻譯自開源項目 30-seconds-of-code

這是一個非常優秀的系列,文章總結了大量的使用es6語法實現的代碼模塊不是說真的三十秒就能理解,也需要你認真的思考,其中有一些點非常精妙,很值得一讀。

本文在我的github同步更新,你可以看到當前翻譯的全部系列。

如果您對本期有不同或者更好的見解,請在下方評論告,喜歡請點個贊,謝謝閱讀。

ary

創建一個可以接收n個參數的函數, 忽略其他額外的參數。

調用提供的函數fn,參數最多為n個, 使用 Array.prototype.slice(0,n) 和展開操作符 (...)。

const ary = (fn, n) => (...args) => fn(...args.slice(0, n));

示例

const firstTwoMax = ary(Math.max, 2);
[[2, 6, "a"], [8, 4, 6], [10]].map(x => firstTwoMax(...x)); // [6, 8, 10]
call

給定一個key和一組參數,給定一個上下文時調用它們。主要用于合并。

使用閉包調用上下文中key對應的值,即帶有存儲參數的函數。

const call = (key, ...args) => context => context[key](...args);

示例

Promise.resolve([1, 2, 3])
  .then(call("map", x => 2 * x))
  .then(console.log); // [ 2, 4, 6 ]
const map = call.bind(null, "map");
Promise.resolve([1, 2, 3])
  .then(map(x => 2 * x))
  .then(console.log); // [ 2, 4, 6 ]
collectInto

將一個接收數組參數的函數改變為可變參數的函數。

給定一個函數,返回一個閉包,該閉包將所有輸入收集到一個數組接受函數中。

const collectInto = fn => (...args) => fn(args);

示例

const Pall = collectInto(Promise.all.bind(Promise));
let p1 = Promise.resolve(1);
let p2 = Promise.resolve(2);
let p3 = new Promise(resolve => setTimeout(resolve, 2000, 3));
Pall(p1, p2, p3).then(console.log); // [1, 2, 3] (after about 2 seconds)
flip

Flip以一個函數作為參數,然后把第一個參數作為最后一個參數。

返回一個可變參數的閉包,在應用其他參數前,先把第一個以外的其他參數作為第一個參數。

const flip = fn => (first, ...rest) => fn(...rest, first);

示例

let a = { name: "John Smith" };
let b = {};
const mergeFrom = flip(Object.assign);
let mergePerson = mergeFrom.bind(null, a);
mergePerson(b); // == b
b = {};
Object.assign(b, a); // == b
over

創建一個函數,這個函數可以調用每一個被傳入的并且才有參數的函數,然后返回結果。

使用 Array.prototype.map()Function.prototype.apply()將每個函數應用給定的參數。

const over = (...fns) => (...args) => fns.map(fn => fn.apply(null, args));

示例

const minMax = over(Math.min, Math.max);
minMax(1, 2, 3, 4, 5); // [1,5]
overArgs

創建一個函數,它可以調用提供的被轉換參數的函數。

使用Array.prototype.map()transforms應用于args,并結合擴展運算符()將轉換后的參數傳遞給fn

const overArgs = (fn, transforms) => (...args) => fn(...args.map((val, i) => transforms[i](val)));

示例

const square = n => n * n;
const double = n => n * 2;
const fn = overArgs((x, y) => [x, y], [square, double]);
fn(9, 3); // [81, 6]
pipeAsyncFunctions

為異步函數執行從左到右的函數組合。

在擴展操作符()中使用Array.prototype.reduce() 來使用Promise.then()執行從左到右的函數組合。
這些函數可以返回簡單值、Promise的組合,也可以定義為通過await返回的async值。
所有函數必須是一元的。

const pipeAsyncFunctions = (...fns) => arg => fns.reduce((p, f) => p.then(f), Promise.resolve(arg));

示例

const sum = pipeAsyncFunctions(
  x => x + 1,
  x => new Promise(resolve => setTimeout(() => resolve(x + 2), 1000)),
  x => x + 3,
  async x => (await x) + 4
);
(async() => {
  console.log(await sum(5)); // 15 (after one second)
})();
pipeFunctions

執行從左到右的函數組合。

在展開操作符()中使用Array.prototype.reduce()來執行從左到右的函數組合。
第一個(最左邊的)函數可以接受一個或多個參數; 其余的函數必須是一元的。

const pipeFunctions = (...fns) => fns.reduce((f, g) => (...args) => g(f(...args)));

示例

const add5 = x => x + 5;
const multiply = (x, y) => x * y;
const multiplyAndAdd5 = pipeFunctions(multiply, add5);
multiplyAndAdd5(5, 2); // 15
promisify

把一個異步函數轉換成返回promise的。

使用局部套用返回一個函數,該函數返回一個調用原始函數的Promise
使用的...操作符來傳入所有參數。

const promisify = func => (...args) =>
  new Promise((resolve, reject) =>
    func(...args, (err, result) => (err ? reject(err) : resolve(result)))
  );

示例

const delay = promisify((d, cb) => setTimeout(cb, d));
delay(2000).then(() => console.log("Hi!")); // Promise resolves after 2s
rearg

創建一個調用提供的函數的函數,該函數的參數按照指定的索引排列。

利用 Array.prototype.map() 根據 indexes 和展開操作符 (...) 對參數進行重新排序,將轉換后的參數傳遞給 fn.

const rearg = (fn, indexes) => (...args) => fn(...indexes.map(i => args[i]));

示例

var rearged = rearg(
  function(a, b, c) {
    return [a, b, c];
  },
  [2, 0, 1]
);
rearged("b", "c", "a"); // ["a", "b", "c"]
spreadOver

接受一個可變參數函數并返回一個閉包,該閉包接受一個參數數組以映射到函數的輸入。

使用閉包和擴展操作符()將參數數組映射到函數的輸入。

const spreadOver = fn => argsArr => fn(...argsArr);

示例

const arrayMax = spreadOver(Math.max);
arrayMax([1, 2, 3]); // 3
unary

創建一個最多接受一個參數的函數,忽略任何其他參數。

只把第一個參數傳遞給要調用的函數fn

const unary = fn => val => fn(val);

示例

["6", "8", "10"].map(unary(parseInt)); // [6, 8, 10]
推薦閱讀

【React深入】setState的執行機制

【React深入】React事件機制

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/102447.html

相關文章

  • 開發NEO智能合約的步驟流程

    摘要:在社區開發的一些最新工具集的幫助下,出現了四步流程法,從而進一步加快了開發效率。兩步流程法傳統上來說,智能合約開發有兩步開發流程編碼和測試。四步工作流程法開發智能合約對于編輯和調試階段,我建議使用兩種方法和。 摘要:開發NEO智能合約的典型開發流程有兩個實際階段:編碼(在IDE中編碼并將源碼編譯為.avm文件)以及測試(在測試網上部署、調用、檢查結果)。這個工作流需要編譯和部署來調試任...

    I_Am 評論0 收藏0
  • 開發NEO智能合約的步驟流程

    摘要:在社區開發的一些最新工具集的幫助下,出現了四步流程法,從而進一步加快了開發效率。兩步流程法傳統上來說,智能合約開發有兩步開發流程編碼和測試。四步工作流程法開發智能合約對于編輯和調試階段,我建議使用兩種方法和。 摘要:開發NEO智能合約的典型開發流程有兩個實際階段:編碼(在IDE中編碼并將源碼編譯為.avm文件)以及測試(在測試網上部署、調用、檢查結果)。這個工作流需要編譯和部署來調試任...

    zhou_you 評論0 收藏0
  • 一個輕量級 Python 裝飾器的緩存庫——wrapcache

    摘要:自己因為經常遇到這種場景,所以將其封裝成一個庫,方便使用。如何使用使用簡單,只需要要在方法上面加一個裝飾器即可緩存,并且設置緩存過期時間。以上即可,第一次運行需要秒,第二次運行過期時間秒之內瞬間給出緩存結果。適合于小場景的方法緩存。 A python Function / Method OUTPUT cache system base on function Decorators. 基...

    馬永翠 評論0 收藏0
  • 一個輕量級 Python 裝飾器的緩存庫——wrapcache

    摘要:自己因為經常遇到這種場景,所以將其封裝成一個庫,方便使用。如何使用使用簡單,只需要要在方法上面加一個裝飾器即可緩存,并且設置緩存過期時間。以上即可,第一次運行需要秒,第二次運行過期時間秒之內瞬間給出緩存結果。適合于小場景的方法緩存。 A python Function / Method OUTPUT cache system base on function Decorators. 基...

    gekylin 評論0 收藏0
  • 30-seconds-code——adapter

    摘要:英文文章來源于給定一個鍵值和一組參數,但給定一個上下文時調用它們。 英文文章來源于:https://github.com/Chalarangelo/30-seconds-of-code/blob/master/README.md Adapter call 給定一個鍵值和一組參數,但給定一個上下文時調用它們。 使用閉包調用存儲的鍵值與存儲的參數 const call = ( key, ....

    dcr309duan 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<