nombre para una función que transforma las instrucciones de asignación a las expresiones
Pregunta
actualizar
Desde uno de los efectos de estas funciones es proporcionar una manera de utilizar encadenamiento en métodos que normalmente no apoyarlo * , estoy considerando llamándolos chain
y copychain
, respectivamente. Esto parece ser menos que ideal, sin embargo, ya que el aspirante a copychain
es sin duda un concepto más fundamental, al menos en términos de programación funcional.
ORIGINAL
Lo estoy llamando un boxer
por ahora. El código es en Python, si la pregunta es general:
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
Un copias similares concepto el aspirante a cesionario, y asignados a los rendimientos y la copia. Éste es un "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
Además, me gustaría obtener información sobre recursos para aprender más sobre este tipo de cosas - aunque estoy seguro de manera similar un nombre para "este tipo de cosas". Parece relacionado con la programación funcional, aunque como yo lo entiendo, estas técnicas no sería necesaria en un cierto lenguaje funcional.
Solución
Esto es más o menos lo mismo que Ruby Object#tap
. No sabe cómo se siente sobre el nombre, pero eso es lo que ellos llaman.
Otros consejos
Lo que los rendimientos boxer
función es probablemente el cierre definen en algunos lenguajes de programación. Si no hay ya una función con este nombre, me llamo el closure
función.