स्कैला का प्रकार अनुमान प्रवाह आधारित है। विधियों और कार्यों को स्पष्ट पैरामीटर प्रकारों की आवश्यकता होती है, जिनका उपयोग अन्य प्रकारों का अनुमान लगाने के लिए किया जाता है। पैरामीटर प्रकार विधि या फ़ंक्शन बॉडी से अनुमानित नहीं हो सकते हैं। कभी-कभी, पैरामीटर प्रकार बाहरी संदर्भ से ज्ञात होते हैं, और फिर उन्हें लेबल करने की आवश्यकता नहीं होती है। दो उदाहरणों में शामिल
val f: String => Unit = hello("aaa", _)
val s = Seq(1,2).map(_+1) // Seq[Int].map expects a function of Int argument type
नीचे करने के लिए, कहते हैं, एमएल और हास्केल तुलना स्काला के प्रकार निष्कर्ष की सीमाओं के बारे मार्टिन ओडर्स्की से एक उद्धरण है। चुनौतियां स्काला का अधिक भार, रिकॉर्ड चयन, और subtyping, साथ ही चीजों को सरल रखने के लिए की जरूरत है, शामिल हैं
कारण स्काला नहीं है Hindley/मिलनर प्रकार निष्कर्ष है कि यह सुविधाओं जैसे के साथ गठबंधन करने के लिए बहुत मुश्किल है है अधिभार के रूप में ( विज्ञापन-भिन्न संस्करण, वर्गों का प्रकार नहीं), रिकॉर्ड चयन, और उप प्रकार। मैं असंभव नहीं कह रहा हूं - इन सुविधाओं को शामिल करने वाले कई एक्सटेंशन मौजूद हैं; असल में मैं उनमें से कुछ खुद का गिटली रहा हूं। मैं बस इतना कह रहा हूं कि अभ्यास में यह काम अच्छी तरह से करना मुश्किल है, जहां किसी को छोटे प्रकार के भाव, और अच्छे त्रुटि संदेशों की आवश्यकता होती है। यह एक शट केस नहीं है - कई शोधकर्ता सीमाओं को धक्का देने पर काम कर रहे हैं (रेमी के एमएलएफ पर उदाहरण के लिए देखें)। लेकिन फिलहाल यह बेहतर सुविधाओं के संदर्भ में इन सुविधाओं के लिए बेहतर समर्थन का एक व्यापार है। आप दोनों तरीकों से ट्रेडऑफ बना सकते हैं। तथ्य यह है कि हम जावा के साथ एकीकृत करना चाहते थे, उपन्यास और हिंडली/मिलनर से दूर के पक्ष में स्केल को स्केल किया।
स्रोत: Universal Type Inference is a Bad Thing पोस्ट के तहत टिप्पणी।
स्रोत
2011-08-19 18:16:13
लेकिन मेरे कोड में, केवल एक 'हैलो' विधि है। आपका मतलब है, कक्षा को बढ़ाया जा सकता है, और उप वर्ग 'हैलो' विधि को ओवरराइड कर सकता है, और कोड तोड़ सकता है? – Freewind
मुझे स्वीकार करना होगा, मुझे यकीन नहीं है कि यह सबक्लासिंग के साथ वास्तव में संभव है या नहीं। लेकिन इसके बिना भी, मुझे लगता है कि यह हमेशा एनोटेशन प्रकार की आवश्यकता के लिए थोड़ा और संगत बनाता है। अन्यथा एक प्रकार के एनोटेशन के बिना सभी कोड जो अचानक टूट जाएंगे, अगर आपने ओवरलोड जोड़ना चुना है। – Debilski
मैं उत्सुक हूं कि क्यों, उस मामले में, 'एम 1' सिर्फ तर्क के प्रकार पर बहुलक नहीं है। –