मैं अतिभारित सामान्य संकलक में जिसके परिणामस्वरूप स्पष्ट पैरामीटर प्रकार जोड़ने के लिए मुझे चाहते तरीकों के साथ मेरी डीएसएल में समस्या हो रही है ले रही है अतिभारित सामान्य विधि में "पैरामीटर प्रकार मिसिंग यू":एक समारोह तर्क
def alpha[T](fun: Int => T): String = fun(33).toString
def beta [T](fun: Int => T): String = fun(66).toString
def beta [T](thunk: => T): String = thunk.toString
alpha { _ + 11 } // ok
beta { _ + 22 } // "error: missing parameter type for expanded function"
beta { _: Int => _ + 22 } // ok... ouch.
किसी भी मौका मैं आखिरी पंक्ति में अव्यवस्था से छुटकारा पा सकते हैं?
संपादित करें:
प्रदर्शित करने के लिए है कि अधिक भार scalac लिए दर असल एक अस्पष्टता समस्या नहीं है, यहाँ जो पूरी तरह से ठीक काम करता है बिना प्रकार पैरामीटर एक संस्करण है:
def beta(fun: Int => String): String = fun(66).reverse
def beta(thunk: => String): String = thunk.reverse
beta(_.toString) // ok
beta("gaga") // ok
हां यह कर सकता है, क्योंकि तर्क int => टी स्केलैक जानता है कि 'अल्फा' के मामले में, यह बीटा के मामले में क्यों नहीं जानता? –
क्योंकि 'बीटा 'अधिभारित है, और दो विकल्प हैं, जिनमें से एक' Int => T' और दूसरा लेता है जो' => टी' लेता है। यही कारण है कि यह बताना असंभव है कि इनमें से कौन सा आप स्पष्ट रूप से बताए बिना इसका जिक्र कर रहे हैं। अल्फा बिल्कुल काम करता है क्योंकि केवल एक बार पसंद है। – rafalotufo
यह सच नहीं है। यह एक दोष है जो एक प्रकार पैरामीटर होने का परिणाम है। यदि कोई विधि सामान्य नहीं है तो मुझे कोई अस्पष्टता नहीं है कि क्या मैं थंक या फ़ंक्शन वर्जन को कॉल करता हूं। मैंने यह दिखाने के लिए सवाल संपादित किया है। –