Name für eine Funktion, die Zuweisungsanweisungen zu Ausdrücke transformiert
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.
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.