पर आधारित अनुमान टाइप करें मैं एक सामान्य फ़ंक्शन लिखने की कोशिश कर रहा हूं जो मिलान पैरामीटर प्रकार स्वीकार करता है।
डेल्फी सादे तर्कों के साधारण मामले में सही प्रकार के पैरामीटर का अनुमान लगाता है।जेनेरिक तर्क प्रकार (डेल्फी)
जैसे:
type
TFoo = class
function Pair<T>(e1, e2: T): TList<T>;
end;
aFoo.Pair(1, 2);
काम करता है बिल्कुल ठीक के साथ इस फोन कर, लेकिन जब मैं एक सामान्य प्रकार
type
TFoo = class
function InsertInto<T>(aList: TList<T>; aVal: T): TList<T>;
end;
पैरामीटर हस्ताक्षर बदल सकते हैं और कोशिश यह कॉल करने के लिए
aFoo.InsertInto(TList<String>.Create, 'bar');
तब संकलक इसके बारे में शिकायत करता है:
E2010 Incompatible types: 'Generics.Collections.TList<uTest.TFoo.InsertInto.T>' and 'Generics.Collections.TList<System.String>'
क्या कोई तरीका है कि मैं इसे (या एक समान) विधि लिख सकता हूं, ताकि क्लाइंट को टाइप पैरामीटर को specity नहीं करना पड़े?
aFoo.InsertInto<String>(TList<String>.Create, 'bar');
मुझे लगता है कि त्रुटि संदेश आपको एक सुराग देता है जो अनुमान लगाता है कि यह काम यहां नहीं किया जा रहा है। क्यू –
के शीर्ष पर सरल उदाहरण की तुलना में यह कंपाइलर की अनुमान प्रणाली के लिए स्पष्ट रूप से एक कठिन समस्या है। एवल बनाने की कोशिश करें: टी पहला पैरामीटर, शायद यह कंपाइलर को आसान बना देगा, लेकिन मौका बहुत खराब है –
"स्ट्रिंग को प्रतिस्थापित करें "स्ट्रिंग" के साथ और E2010 असंगत प्रकारों का आनंद लें: 'System.Generics.Collections.TList' और 'बूलियन' –