اسم وظيفة تحول عبارات التعيين إلى التعبيرات
سؤال
تحديث
نظرًا لأن تأثير واحد من هذه الوظائف هو توفير طريقة للاستخدام طريقة السلاسل على الطرق التي لا تدعمها عادة *, ، أنا أفكر في الاتصال بهم 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
.