Имя для функции, которая преобразует операторы назначения в выражения
Вопрос
Обновить
Поскольку одним эффектом этих функций является предоставление способа использования метод цепочка на методах, которые обычно не поддерживают это *, Я собираюсь позвонить им chain
и copychain
, соответственно. Это кажется не идеальным, хотя, поскольку потенциал copychain
Возможно, более фундаментальная концепция, по крайней мере, с точки зрения функционального программирования.
оригинал
Я называю это 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
Кроме того, я хотел бы узнать о ресурсах для получения дополнительной информации об подобных вещах - хотя я так же не уверен в названии «подобных вещей». Похоже, что это связано с функциональным программированием, хотя, насколько я понимаю, эта техника была бы ненужной на истинном функциональном языке.
Решение
Это почти то же самое, что и Руби Object#tap
. Анкет Не знаю, как вы относитесь к имени, но это то, что они называют.
Другие советы
Что за boxer
Возвращение функции, вероятно, определяется закрытие на некоторых языках программирования. Если с этим именем еще нет функции, я бы назвал функцию closure
.