最初のパラメータの型だけでなく、任意の述語に基づいて、関数のさまざまな実装をディスパッチできます。現在、私はそうのようにそれをしなければならない。Pythonでの関数パターンと述語の照合
def f(param):
try:
if param > 0:
# do something
except TypeError:
pass
try:
if all(isinstance(item, str) for item in param):
# do something else
except TypeError:
raise TypeError('Illegal input.')
は、ここで私が行うことができるようにしたいのですが何の精神で何か:
@generic
def f(param):
raise TypeError('Illegal input.') # default
@f.when(lambda param: param > 0)
def f_when_param_positive(param):
# do something
@f.when(lambda param: all(isinstance(item, str) for item in param))
def f_when_param_iterable_of_strings(param):
# do something else
しかし、Pythonの3のsingledispatch
に似てsingledispatch
任意の述語ではなく、型のディスパッチのみをサポートします。
TL; DR:パラメータの型だけでなく、任意の述語に基づく関数の述語ベースのディスパッチを可能にするライブラリがありますか?
Oooh。どうやら正確で完全な答えが下落したのはどうですか?私は疑問に思う。 – Elazar