割り当てステートメントを式に変換する関数の名前
質問
アップデート
これらの機能の1つの効果は、使用する方法を提供することであるため メソッドチェーン 通常はサポートしない方法について *, 、私は彼らに電話することを検討しています chain
と copychain
, 、 それぞれ。しかし、これは理想的ではないようですが、 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
.
所属していません StackOverflow