название функции, которая преобразовывает операторы присваивания к выражениям

обновление

Так как один эффект этих функций состоит в том, чтобы позволить использовать объединение в цепочку метода на методах, которые обычно не поддерживали бы его *, я рассматриваю вызов их chain и copychain, соответственно. Это кажется меньше, чем идеал хотя, начиная с потенциального copychain возможно более фундаментальное понятие, по крайней мере, с точки зрения функционального программирования.


исходный

Я называю это a 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

Кроме того, я хотел бы узнать о ресурсах для получения дополнительной информации об этих видах вещей — хотя я столь же не уверен в названии "этих видов вещей". Это действительно кажется связанным с функциональным программированием, хотя насколько я понимаю, они техника была бы ненужной на истинном функциональном языке.

1
задан intuited 25 June 2010 в 05:03
поделиться

1 ответ

Функция boxer , вероятно, возвращает закрытие, определенное в некоторых языках программирования. Если функции с таким именем еще нет, я бы назвал функцию закрытием .

0
ответ дан 2 September 2019 в 23:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: