Frage

aktualisieren

Da eine Wirkung dieser Funktionen ist es, eine Möglichkeit zu bieten, Methode zu verwenden Verkettungs auf Methoden die normalerweise nicht unterstützen würde es * , ich überlege sie, jeweils chain und copychain aufrufen. Dies scheint weniger als ideal aber, da der Möchtegern-copychain ist wohl ein fundamentaler Begriff, zumindest hinsichtlich der funktionalen Programmierung.


original

Ich rufe es ein boxer für jetzt. Der Code ist in Python, obwohl die Frage ist allgemein:

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

Ein ähnliches Konzept kopiert die Möchtegern-Anmelder, und Abtretungsempfänger zu und gibt die Kopie. Dies ist ein "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

Darüber hinaus würde Ich mag über Ressourcen, um herauszufinden, um mehr über diese Art von Dingen zu lernen - obwohl ich für „diese Art von Dingen“ ähnlich unsicher einen Namen bin. Es scheint im Zusammenhang mit dem funktionalen Programmierung, obwohl, wie ich es verstehe, würde diese Technik in einer echten funktionalen Sprache nicht notwendig sein.

War es hilfreich?

Lösung

Das ist so ziemlich das gleiche wie Rubys Object#tap . Sie wissen nicht, wie Sie über den Namen fühlen, aber das ist, was sie es nennen.

Andere Tipps

Was die boxer Funktion gibt wahrscheinlich Schließung in einigen Programmiersprachen definiert ist. Wenn es nicht bereits eine Funktion mit diesem Namen ist, würde ich die Funktion closure nennen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top