سؤال

تحديث

نظرًا لأن تأثير واحد من هذه الوظائف هو توفير طريقة للاستخدام طريقة السلاسل على الطرق التي لا تدعمها عادة *, ، أنا أفكر في الاتصال بهم chain و copychain, ، على التوالى. هذا يبدو أقل من مثالي ، لأن المحتملة copychain يمكن القول أنه مفهوم أكثر جوهرية ، على الأقل من حيث البرمجة الوظيفية.


أصلي

أنا أسميها أ boxer الى الان. الكود في بيثون ، على الرغم من أن السؤال عام:

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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top