質問

アップデート

これらの機能の1つの効果は、使用する方法を提供することであるため メソッドチェーン 通常はサポートしない方法について *, 、私は彼らに電話することを検討しています chaincopychain, 、 それぞれ。しかし、これは理想的ではないようですが、 copychain 少なくとも機能的プログラミングの観点から、間違いなくより基本的な概念です。


オリジナル

私はそれを呼んでいます boxer 今のところ。コードはPythonにありますが、質問は一般的です。

def boxer(f):
    """Return a function g(o, *args, **keyargs) -> o

    `g` calls `f` on `o` with the remaining arguments
        and returns `o`.

    >>> l = [2]
    >>> def increment_list_element(l, i):
    ...     l[0] += i
    >>> adder = boxer(increment_list_element)
    >>> adder(l, 2)
    [4]
    >>> def multiply_list_element(l, i):
    ...     l[0] *= i
    >>> multiplier = boxer(multiply_list_element)
    >>> sum(multiplier(l, 6))
    24
    """
    def box(o, *args, **keyargs):
        f(o, *args, **keyargs)
        return o
    return box

同様のコンセプトが譲受人をコピーし、コピーに割り当てて返品します。これは「shadow_boxer":

from copy import deepcopy

def shadow_boxer(f):
    """Return a function g(o, *args, **keyargs) -> p

    `g` deepcopies `o` as `p`,
        executes `f` on `p` with the remaining arguments,
        and returns `p`.

    >>> l = [2]
    >>> def increment_list_element(l, i):
    ...     l[0] += i
    >>> adder = shadow_boxer(increment_list_element)
    >>> adder(l, 2)
    [4]
    >>> def multiply_list_element(l, i):
    ...     l[0] *= i
    >>> multiplier = shadow_boxer(multiply_list_element)
    >>> sum(multiplier(l, 6))
    12
    """
    def shadow_box(o, *args, **keyargs):
        p = deepcopy(o)
        f(p, *args, **keyargs)
        return p
    return shadow_box

さらに、これらの種類のことについてさらに学ぶためのリソースについて知りたいと思いますが、「これらの種類のこと」の名前も同様に確信していません。それは機能的なプログラミングに関連しているように見えますが、私が理解しているように、これらの手法は真の機能的言語では不要です。

役に立ちましたか?

解決

これはRubyのものとほとんど同じです Object#tap. 。あなたが名前についてどのように感じているかわからないが、それは彼らがそれを呼んでいるものだ。

他のヒント

boxer 関数のリターンは、おそらく一部のプログラミング言語で閉鎖を定義します。この名前の関数がまだない場合は、関数を呼び出します closure.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top