我在我的代码和库中随处可见这种模式,但似乎没有我可以在任何地方找到的名称或抽象。
示例(伪代码)
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;
}
基本上,您有一个就地功能(有副作用)并从中制作了一个不合时宜的功能(没有副作用)。
这种模式有名字吗?您知道使用它的任何库或语言吗?显然函数式语言不会使用它,因为它们一开始就没有引用不透明的函数。