Под функцией Compose
. Если f
и g
являются унарными функциями, возвращающими значения, то Compose (f, g)
возвращает функцию, которая при вызове на x
выполняет эквивалент f (g (x))
.
static Func<X, Z> Compose<Z, Y, X>(Func<Y, Z> f,Func<X, Y> g)
{ return x => f(g(x)); }
Вот пара простых значений Func
, которые можно составить:
Func<int, bool> is_zero = x => { return x == 0; };
Func<int, int> mod_by_2 = x => { return x % 2; };
Например. это работает:
Console.WriteLine(Compose(is_zero, mod_by_2)(4));
Однако, если вместо этого у меня есть эти эквивалентные статические методы:
static bool IsZero(int n) { return n == 0; }
static int ModBy2(int n) { return n % 2; }
тот же пример не работает с ними. Т.е. это приводит к ошибке времени компиляции:
Console.WriteLine(Compose(IsZero, ModBy2)(4));
Явная передача типов в Compose
устраняет проблему:
Console.WriteLine(Compose<bool, int, int>(IsZero, ModBy2)(4));
Есть ли способ написать Compose
, чтобы он работал со статическими методами без явные типы?
Это хороший подход к реализации Compose
? Может ли кто-нибудь внести в это улучшения?