【问题标题】:Passing arguments to multiple functions将参数传递给多个函数
【发布时间】:2016-04-02 18:34:03
【问题描述】:

我有 2 个关于函数编程的一般性问题。

考虑以下 3 个函数:

result = fun3(fun2(fun1(param1))); // param4

function fun1(param1) {
    // ...
    return param2;
}
function fun2(param2) {
    // ...
    return param3;
}
function fun3(param3) {
    // ...
    return param4;
}

每个函数都需要 1 个参数,进行一些计算并返回一个变量。
在我的例子中,每个后续函数都依赖于前面函数的输出。

  1. 我的示例中的解决方案是一种常见的做法吗?还是有更好的方法?
  2. 如果一个函数产生 2 个输出而 2 个不同的函数需要它们怎么办?

就像这个例子:

function fun1(param1) {
    // ...
    return param2, param3;
}
function fun2(param2) {
    // ...
    return param4;
}
function fun3(param3) {
    // ...
    return param5;
}

PS:虽然这是一个一般性的编程问题,但也许值得一提的是,我使用的是PHP

【问题讨论】:

    标签: function design-patterns methods functional-programming


    【解决方案1】:

    第一个问题的答案是,是的,它是函数式编程中非常常见的技术。它是例如currying 的基础,这也很常见。

    关于第二个问题,许多函数式语言都支持元组或异构列表的概念——如果您想返回多个值,您要么显式创建一个值,要么运行时为您即时生成一个值。将返回值发送到多个后续函数将在执行多路复用的辅助函数的帮助下完成。问题变成了你如何处理这些函数的返回值,我猜大概是一个列表。这可能取决于您的用例。

    在 Python 中可能看起来像

    def multiplex(functions, value):
        return [func(value) for func in functions]
    

    为了与您的单参数风格保持一致,上述内容可能最终会以某种方式进行柯里化,以便将要多路复用的函数列表绑定到单独的函数应用程序中。不同的语言以不同的方式实现这一点,Python 有一个 functools 模块,它支持函数的部分应用,而 Scala 原生支持函数的部分应用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-14
      • 2014-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多