将参数传递给多个函数

时间:2015-12-28 22:07:58

标签: function design-patterns methods functional-programming

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

考虑以下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个不同的函数需要它们怎么办?
  3. 就像这个例子一样:

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

    PS:虽然这是一般编程问题,但也许重要的是,我使用PHP

1 个答案:

答案 0 :(得分:1)

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

关于第二个问题,许多函数式语言支持元组或异构列表的概念 - 如果要返回多个值,您可以显式创建一个或运行时为您动态生成一个。将返回值发送到多个后续函数中将借助于执行多路复用的辅助函数来完成。问题变成了如何处理这些函数的返回值,可能是我猜的列表。这可能取决于您的使用案例。

在Python中可能看起来像

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

为了保持单参数样式,上面可能会以某种方式进行curry,以便Multiplex的函数列表绑定在一个单独的函数应用程序中。不同的语言以不同的方式实现,Python有一个functools模块,支持部分应用函数,而Scala本身支持部分应用函数。