私はミドルウェア関数にデバッグを呼び出させようとしています。これはいくつかのパラメーターを取り、それらをログに記録して次の関数に渡す必要があります。
const debug = (...args) => {
console.log(...args)
return args // will return array, not argument type variable
}
const compose = (...fns) => (...arg) => (
fns.slice().reverse().reduce(
(acc, fn) => !acc ? fn(...arg) : fn(acc), null
)
)
const f = x => x * x
const g = (a, b) => a + b
const makeMagic = compose(
f,
g,
debug
)
makeMagic(1, 2)
コンポジションからデバッグを削除すると、すべてが期待どおりに機能します。最後に配置するとすぐに壊れます。引数を取るが配列を返すからです。
私はdebug
このように書き直そうとしました:
function debug() {
console.info(arguments)
return arguments
}
しかし、失敗することはありません。
関数には常に単一の結果値しかありません。複数の引数を受け入れ、複数の値を「返す」関数を作成するには、その周りに何らかのコンテナ(配列など)がないと、JavaScriptの機能ではありません(他のほとんどのプログラミング言語も同様です)。
単一の引数debug
に対して純粋なパススルーを作成できますが、複数の引数を作成することはできません。したがって、たとえば、次のように機能させることができます。
const result = debug(makeMagic(1, 2))
... (ログに記録した後に)返さresult
れる値makeMagic
はどこにありますが、作成した方法で値をdebug
含めることはできませんmakeMagic
。
持っているdebug
あなたにチェーンの途中で(または他の関数)compose
、あなたはそれとすべてと規則を使用する必要があると思いますcompose
、おそらくそれらをすべて返却アレイを有することで、彼らは複数の値を返す方法については可能な機能。今ファクトtahtに役立ちますまた、あなたのことをcompose
それは使用しています:関数は、私はバグであると仮定し何を持っている...args
、以前の関数が返された任意の時間falsy(値を0
、""
、NaN
、null
、undefined
、またはfalse
)を、私はかなりあなたが行うことを意味していますそれは最初の呼び出しでのみです。
compose
結果の配列を返す関数である構成可能な関数を期待するバージョンは次のとおりです。
const debug = (...args) => {
console.log(...args);
return args;
};
const compose = (...fns) => (...args) => (
fns.slice().reverse().reduce(
(acc, fn) => fn(...(acc || args)),
null
)
);
const f = x => [x * x];
const g = (a, b) => [a + b];
const makeMagic = compose(
f,
g,
debug
);
const result = makeMagic(1, 2);
console.log(result);
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加