代码之家  ›  专栏  ›  技术社区  ›  Aaron

组合函数时如何使用初始值

  •  0
  • Aaron  · 技术社区  · 6 年前

    我正在用Ramda.js构建一个管道,它接受三个参数。第一个函数需要这三个参数,其结果用于第二个函数。但是,第二个函数还需要一个初始参数。我想不出要建造这样的分支。

    在伪代码风格中,我需要这样的东西:

    const composedFunction = R.pipe(
      firstFunction,
      secondFunction,
    );
    
    const firstFunction = (reusedArgument, secondArgument, thirdArgument) => someAnswer;
    const secondFunction = (reusedArgument, someAnswer);
    
    console.log(composedFunction({ foo: bar }, [5, 3, 4], [100, 12, 12]));
    
    0 回复  |  直到 6 年前
        1
  •  3
  •   customcommander    6 年前

    我可以想出一些解决办法:

    将管道包装到另一个函数中,以便组合中的函数仍然可以引用原始参数。

    func2 接受的输出 func1 但也可以得到 b 功能2 必须是curried,并设计为接受它的“数据”作为最后一个参数(这是Ramda和函数式编程的一个原则,通常我会说)。

    const func3 = (a, b, c) =>
      pipe(func1, func2(b))
       (a, b, c);
    
    func3(10, 20, 30);
    

    其他选择, 功能1 返回一个数组,您可以在该数组中进行解构 .

    我不认为这特别好,但这是一个选择:

    const func1 = (a, b, c) => [a + c, b];
    const func2 = ([sum, b]) => sum * b;
    
    const func3 = pipe(func1, func2);
    func3(10, 20, 30);
    
        2
  •  1
  •   Scott Sauyet    6 年前

    我想这里最简单的事就是不去打扰拉姆达的 pipe

    const func1 = (a, b, c) => `func1 (${a}, ${b}, ${c})`
    const func2 = (a, d) => `func2 (${a}, ${d})`
    
    const func3 = (a, b, c) => func2 (func1 (a, b, c), a)
    
    console .log (func3 ('a', 'b', 'c'))

    拉姆达最近 considering a way 为了使这对于较长的管道更容易;尽管如此,对于一些函数来说,上面的内容可能更简单。