1

更新

由于这些函数的一个作用是提供一种在通常不支持它的方法上使用方法链接的方法*,我正在考虑分别调用它们chaincopychain。不过,这似乎不太理想,因为可能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

此外,我想了解更多关于这类事物的资源——尽管我同样不确定“这类事物”的名称。它似乎与函数式编程有关,尽管据我了解,这些技术在真正的函数式语言中是不必要的。

4

2 回答 2

2

这与 Ruby 的Object#tap. 不知道你对这个名字有什么感觉,但这就是他们所说的。

于 2010-10-08T22:01:28.887 回答
0

boxer函数返回的可能是某些编程语言中定义的闭包。如果还没有具有此名称的函数,我将调用该函数closure

于 2010-06-24T13:14:19.740 回答