मैं कुछ वर्षों से एफ # में प्रोग्रामिंग कर रहा हूं और एक "मुद्दा" है जो मुझे कुछ समय से परेशान कर रहा है और मैं हल करने में सक्षम नहीं हूं। यह एक बग नहीं है, मुझे लगता है कि यह एक डिजाइन निर्णय है, लेकिन वैसे भी, समस्या यह है: क्या इंटरफेस के कार्यान्वयन में देरी करने का कोई तरीका है (शायद यह सही शब्द नहीं है), यानी उन्हें लागू नहीं कर रहा है प्रारंभिक परिभाषा में, लेकिन बाद में, शायद उसी फ़ाइल में जब मैंने टाइप के लिए मॉड्यूल लागू किया हो। मैं एक सरल उदाहरण के साथ समझाएंगे: मान लीजिए मैं निम्न डेटा संरचना है:इंटरफ़ेस विधियों के कार्यान्वयन में देरी?
type 'T MyCollection =
(*type definition*)
interface IEnumerable<'T> with
member this.GetEnumerator() =
(* I don't want to implement it here
because I still don't have the module
with a toSeq function *)
मैं विधि लागू वहीं हैं, तो मैं भी प्रकार और उसके बाद के तरीकों के रूप में सभी कार्यों को लागू करने के लिए होगा विधियों को कॉल करने के लिए मॉड्यूल सिर्फ "प्रॉक्सी" होगा। इस तरह से मैं एक ओओ-प्रथम डेटा संरचना बना रहा हूं और फिर कार्यात्मक-प्रथम उपयोग की अनुमति देने के लिए एक मॉड्यूल (टाइप एनोटेशन के साथ अधिभारित) बना रहा हूं। मैं एक कार्यात्मक-प्रथम डेटा संरचना लिखना पसंद करूंगा (क्लीनर टाइप प्रकार अनुमान बेहतर काम कर सकता है) और उसके बाद ओओ रैपर बनाएं ताकि सी # जैसी भाषाओं के लिए बेहतर इंटेलिजेंस समर्थन की अनुमति मिल सके। यह दृष्टिकोण एफ # के लिए डिज़ाइन दिशानिर्देशों का अनुपालन करता है, लेकिन इंटरफ़ेस को कहीं भी लागू नहीं किया जा सकता है लेकिन इस प्रकार की प्रारंभिक परिभाषा में। वह प्रतिबंध मुझे सदस्यों के साथ पूरी डेटा संरचना लिखने के लिए मजबूर करता है। मैं उदाहरण ढूंढ रहा हूं और मुझे पता चला है कि FSharp.Core list में सूची कार्यान्वयन ठीक वही करता है जो मैं चाहता हूं, लेकिन मैं ऐसा नहीं कर सकता, संकलक मुझे नहीं जाने देगा। मुझे पूरा यकीन है कि यह एक डिज़ाइन निर्णय है, शायद बुरे प्रथाओं को प्रोत्साहित करने से बचने के लिए, मुझे नहीं पता, लेकिन मैं अपनी इच्छा को खराब अभ्यास नहीं मानता। इसके अलावा मैं fsharp संकलक की रैखिक प्रकृति के बारे में अच्छी तरह से अवगत हूं।
कृपया अगर आप में से कोई भी जानता है कि मैं क्या चाहता हूं, तो मुझे खुशी होगी अगर आप मुझे बताएंगे। इसके अलावा, अगर आप में से कोई भी जानता है कि मुझे इस दृष्टिकोण का पालन क्यों नहीं करना चाहिए तो मुझे भी जानकर खुशी होगी। एक कारण होना चाहिए कि यह किसी और के लिए कोई समस्या नहीं है।
अग्रिम धन्यवाद।
जवाब के लिए धन्यवाद, मैं सच में शर्मिंदा है कि मैं चीजों को मेरी समझ में गलत हो रही जा सकता था। अब तक मैंने इस मुद्दे को अपने तरीके से निपटाया है क्योंकि मेरे सभी एफ # कोड निजी इस्तेमाल के लिए हैं, मुझे ओओ भाषाओं के लिए एक अच्छा इंटरफ़ेस प्रदान नहीं करना पड़ा है। लेकिन हाल ही में मैंने fwarpx.collections (अभी भी एक पुल अनुरोध में) के लिए एक स्काईबिनोमियलहेप का कार्यान्वयन जोड़ा है और इसे एक और पारंपरिक और सार्वजनिक रूप से स्वीकार्य तरीके से निपटाना पड़ा। –
हां, वह समाधान पूरी तरह से ठीक काम करता है। लेकिन मुझे डर है कि भाषा के भविष्य के संस्करण में यह बहिष्कृत से अवैध हो सकता है। एक बार फिर धन्यवाद। –
[उपयोगकर्ता आवाज सबमिट की गई] (http://fslang.uservoice.com/forums/245727-f-language/suggestions/8733178-revert-back-to-an-accepted-feature-the-delayed-imp) –