更新

因为这些功能的一种效果是提供一种使用方式 方法链 关于通常不支持它的方法 *, ,我正在考虑打电话给他们 chaincopychain, , 分别。但是,这似乎并不理想,因为 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

此外,我想了解有关更多有关这些事情的更多信息的资源,尽管我同样不确定“这些东西”的名称。它似乎与功能编程有关,尽管据我了解,这些技术在真正的功能语言中是不必要的。

有帮助吗?

解决方案

这与Ruby的东西几乎是一样的 Object#tap. 。不知道您对这个名字的感觉,但这就是他们所说的。

其他提示

什么 boxer 功能返回可能是某些编程语言中定义的闭合。如果此名称尚未有函数,我会调用该函数 closure.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top