gpt4 book ai didi

javascript - 创建参数类型的变量

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:53:26 25 4
gpt4 key购买 nike

我正在尝试让中间件函数调用它调试,它应该接受一些参数,记录它们并传递给下一个函数:

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

要在 compose 链的中间使用 debug(或任何其他函数),您必须对它和所有 使用约定>compose关于它们如何返回多个值的函数,可能是通过让它们都返回一个数组。这也有助于说明现在的事实,你的 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);

关于javascript - 创建参数类型的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55500420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com