Bên dưới chức năng Compose
. Nếu f
và g
là các hàm đơn nhất trả về giá trị, thì Compose(f,g)
trả về một hàm khi được gọi trên x
thực hiện tương đương với f(g(x))
.Thành phần chức năng
static Func<X, Z> Compose<Z, Y, X>(Func<Y, Z> f,Func<X, Y> g)
{ return x => f(g(x)); }
Dưới đây là một vài Func
giá trị đơn giản mà có thể được bao gồm:
Func<int, bool> is_zero = x => { return x == 0; };
Func<int, int> mod_by_2 = x => { return x % 2; };
Ví dụ: công trình này:
Console.WriteLine(Compose(is_zero, mod_by_2)(4));
Tuy nhiên, nếu tôi thay vì có những phương pháp tĩnh tương đương:
static bool IsZero(int n) { return n == 0; }
static int ModBy2(int n) { return n % 2; }
ví dụ tương tự không làm việc với những người. I E. này tạo ra một lỗi thời gian biên dịch:
Console.WriteLine(Compose(IsZero, ModBy2)(4));
loại Rõ ràng qua để Compose
sửa chữa vấn đề này:
Console.WriteLine(Compose<bool, int, int>(IsZero, ModBy2)(4));
Liệu có cách nào để viết Compose
như vậy mà nó hoạt động trên các phương pháp tĩnh mà không cần các loại rõ ràng?
Đây có phải là cách tiếp cận tốt để thực hiện Compose
không? Có ai có thể cải thiện điều này không?
C# 's cứng trong việc đối xử với các loại chức năng/đại biểu là một điều mà luôn luôn tôi thất vọng khi so sánh với vịt các ngôn ngữ có dạng như JavaScript. –