Compose
फ़ंक्शन के नीचे। यदि f
और g
समान कार्य हैं जो मान वापस करते हैं, तो Compose(f,g)
एक फ़ंक्शन देता है जिसे x
पर कॉल किया जाता है f(g(x))
के बराबर करता है।फ़ंक्शन संरचना
Func<int, bool> is_zero = x => { return x == 0; };
Func<int, int> mod_by_2 = x => { return x % 2; };
जैसे:
static Func<X, Z> Compose<Z, Y, X>(Func<Y, Z> f,Func<X, Y> g)
{ return x => f(g(x)); }
यहाँ सरल Func
मूल्यों के एक जोड़े जो बना जा सकता है इस काम करता है:
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
लागू करने के लिए यह एक अच्छा तरीका है? क्या कोई इस में सुधार कर सकता है?
सी # के समारोह/प्रतिनिधि प्रकार के अपने इलाज में कठोरता एक बात यह है कि हमेशा मुझे निराश है को शामिल किया गया जब बतख की तुलना में इस विशेष विषय पर एक व्यापक ब्लॉग लेख लिखा था जावास्क्रिप्ट जैसे टाइप की गई भाषाओं। –