Saturday 15 May 2010

class - Optional argument in a method with ocaml -



मुझे एक विधि वर्ग में वैकल्पिक तर्क के साथ एक समस्या आती है।

मुझे बताएं । मेरे पास एक पाथफाइंडिंग क्लास ग्राफ (वॉली मॉड्यूल में) और उसका एक तरीका है shortestPath यह एक वैकल्पिक तर्क का उपयोग करता है। तथ्य यह है कि जब मैं (वैकल्पिक तर्क के साथ या नहीं) कॉल करता हूं तो यह विधि ओकैमल प्रकार की एक विरोधाभासी पर वापस लौटती है:

  त्रुटि: इस अभिव्यक्ति का प्रकार Wally.graph है, लेकिन एक अभिव्यक्ति की अपेक्षा प्रकार और लेफ्टिनेंट ; GetCoor: स्ट्रिंग - & gt; Int * int; GetNearestNode: int * int - & gt; स्ट्रिंग; लघुपथ: src: स्ट्रिंग - & gt; स्ट्रिंग - & gt; स्ट्रिंग सूची; .. & gt; विधि शॉर्टकट के लिए प्रकार असंगत हैं   

जबकि shortestPath प्रकार है:

  विधि का छोटा पद:? Src: string - & gt; स्ट्रिंग - & gt; स्ट्रिंग सूची   

मैंने एक वैकल्पिक तर्क के लिए विकल्प प्रारूप का उपयोग करने की कोशिश की है:

  विधि shorttionPath? Src डीएसटी = सो स्रोत = मैच एसआरसी के साथ | कोई नहीं - & gt; CurrentNode | कुछ नोड - & gt; नोड इन ...   

केवल इस मामले में जहां मैं वैकल्पिक तर्क को हटाता हूं, ओकैमल मुझे अपमानित करना रोक देता है।

आपकी मदद के लिए अग्रिम धन्यवाद:) < / P>

यह आपकी स्थिति क्या है, यह बहुत स्पष्ट नहीं है, लेकिन मैं निम्नलिखित का अनुमान लगाता हूं:

  चलो = ओ # एम 1 + 2 चलो ओ = ऑब्जेक्ट विधि एम? एलएक्स = एम के साथ मैच कुछ y - & gt; एक्स + वाई | कोई नहीं - & gt; एक्स () = () के लिए टाइप करें (*) टाइप करें। विधि x के लिए प्रकार असंगत हैं। *)   

उपयोग साइट (यहाँ f की परिभाषा है) ), वस्तु का प्रकार इसके संदर्भ से अनुमानित है। यहां, ओ: & lt; X: int - & gt; पूर्णांक; .. & gt; x का तरीका यहाँ तय हो गया है।

बाद में परिभाषित ऑब्जेक्ट f के तर्क से स्वतंत्र है और उस प्रकार का & lt; M:? L: int - & gt; इंट - & gt; पूर्णांक; .. & gt; और दुर्भाग्यवश इस प्रकार दूसरे के साथ असंगत है।

एक वैकल्पिक वैकल्पिक प्रयोग के बारे में वैकल्पिक साइट के बारे में अधिक टाइपिंग संदर्भ देना है:

  let fo = o # m ? L: कोई भी नहीं 1 + 2 (* स्पष्ट रूप से बता रहा है कि एल * है) ओ = ऑब्जेक्ट विधि एम? एलएक्स = एम के साथ मैच कुछ y - & gt; एक्स + वाई | कोई नहीं - & gt; X एंड   

या o :

  वर्ग c = वस्तु विधि m? Lx = ... का प्रकार दें। फ़ंक्शन अधिक पॉलिमोप्रिक्स प्राप्त करने के लिए अंत में च (ओ: # सी) = ओ # एम 1 + 2 (* न (ओ: सी) लेकिन (ओ: # सी) चलो ओ = नया सी चलो () = Print_int (fo)   

मुझे लगता है कि यह आसान है क्योंकि आमतौर पर पहले से ही एक वर्ग घोषणा है।

वैकल्पिक तर्कों के साथ फ़ंक्शन का उच्च क्रम उपयोग के बीच इस तरह की गड़बड़ होती है वस्तुओं के बाहर भी ओकैमल इसे ठीक से हल करने की कोशिश करता है लेकिन यह हमेशा संभव नहीं होता है। इस मामले में:

  च च = जी 1 + 2 च? जी एक्स = कुछ वाई के साथ मैच एल - & gt; एक्स + वाई | कोई नहीं - & gt; X चलो () = प्रिंट_इन (एफ जी)   

अच्छी तरह से टाइप किया गया है।

मुख्य नियम: यदि OCaml छोड़े गए वैकल्पिक तर्कों के बारे में अनुमान नहीं लगा सकता है, तो उन्हें स्पष्ट रूप से कुछ प्रकार के संदर्भ देने की कोशिश करें।

No comments:

Post a Comment