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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top