更新
由于这些函数的一个作用是提供一种在通常不支持它的方法上使用方法链接的方法*,我正在考虑分别调用它们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
此外,我想了解更多关于这类事物的资源——尽管我同样不确定“这类事物”的名称。它似乎与函数式编程有关,尽管据我了解,这些技术在真正的函数式语言中是不必要的。