代码之家  ›  专栏  ›  技术社区  ›  intuited

将赋值语句转换为表达式的函数的名称

  •  1
  • intuited  · 技术社区  · 14 年前

    更新

    因为这些函数的一个作用是提供一种使用 method chaining 通常不支持它的方法 * ,我正在考虑给他们打电话 chain 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
    

    此外,我想了解更多关于这些东西的资源,尽管我同样不确定“这些东西”的名称。它看起来确实与函数式编程有关,尽管我理解,在真正的函数式语言中,这些技术是不必要的。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Chuck    14 年前

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

        2
  •  0
  •   avpaderno    14 年前

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