这个高阶函数有名字吗?

时间:2010-11-16 08:22:48

标签: language-agnostic idioms generic-programming higher-order-functions

我在我的代码和图书馆中到处都看到这种模式,但似乎没有任何名称或抽象可以在任何地方找到。

示例(伪代码)

T foo( T x, void f(T&) )
{
    T y = x;
    f( y );
    return y;
}

基本上:获取一个值,以及一个转换该值的函数。制作一个值的副本,转换它并返回它。

现实生活中的例子(C ++)

T operator+(const T& x, const T& y)
{
    T z = x; // Make a copy
    operator+=(z, y); // Modify in place
    return z;
}

Vector3 Vector3::normalized() const
{
    Vector3 x = *this; // Make a copy
    x.normalize(); // Modify in place
    return x;
}

T sorted(T const& x)
{
    T y = x; // Make a copy (yeah, yeah, could have passed by value)
    sort( y ); // Modify in place
    return y;
}

基本上,你有一个就地功能(有副作用)并且不会产生一个不合适的功能(没有副作用)。

这个模式有名字吗?您知道使用它的任何库或语言吗?显然,函数式语言不会使用它,因为它们没有开头的引用不透明函数。

1 个答案:

答案 0 :(得分:1)

实际上,数学和FP被称为合成,因为你可以将其表达为mystery_function(x, fun) = fun(copy(x))

在Design Patterns中,它是一个包装器,用一个副本包装函数调用。所以我宁愿自然称之为复制包装。但我从来没有把它归类到任何地方。