我在代码中到处看到这种模式,而在库中,它似乎没有任何名称或抽象,我在任何地方都能找到。
示例(伪代码)
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;
}
基本上,你有一个到位的功能(有副作用)和一个错位的功能(没有副作用)。
这个图案有名字吗?你知道有什么图书馆或语言使用它吗?显然函数式语言不会使用它,因为它们没有开始时引用的不透明函数。