4
我在代码和库中的任何地方都能看到这种模式,但似乎没有任何名称或抽象,我可以在任何地方找到它。这个高阶函数是否有名字?
实施例(伪代码)
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;
}
基本上,你有一个到位函数(副作用),使外的地方的功能(无副作用)出来的。
这种模式是否有名称?你知道任何使用它的图书馆或语言吗?很明显,函数式语言不会使用它,因为它们不具有起始的不透明函数。
这听起来很像K combinator – SingleNegationElimination 2010-11-16 08:37:01
它很相似,但不一样。这里的关键是'f'是一个* in-situ *算法,即'f(x)'*变异*'x' - 它不返回任何东西。 – 2010-11-16 09:15:46
由于理论函数式编程没有副作用,因此很可能没有这个名称。换句话说,这种变换FP不友好的功能变成REAL功能(注意:REAL功能不会吃乳蛋饼) – slebetman 2010-11-16 10:17:14