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;
}

基本的に、インプレース関数 (副作用あり) があり、そこからアウトオブプレース関数 (副作用なし) を作成します。

このパターンに名前はありますか?それを使用するライブラリまたは言語を知っていますか? 明らかに関数型言語は、そもそも参照的に不透明な関数を持っていないため、それを使用しません。

4

1 に答える 1

1

それは実際には数学で FP と呼ばれるものであり、mystery_function(x, fun) = fun(copy(x))代わりにそれを表現できるためです。

デザイン パターンの用語では、関数呼び出しをコピーでラップするラッパーです。したがって、私はむしろそれをcopy wrapperと呼んでいます。しかし、どこにも分類されているのを見たことがありません。

于 2011-07-14T21:34:28.880 に答える