2012-06-07 6 views
8

स्काला आईडीई में मैं मिल वर्ग के बारे में निम्न त्रुटि मैं संकलित करने के लिए कर रहा हूँ:स्काला - अजीब संकलन त्रुटि (एक विधि के कई अतिभारित विकल्प डिफ़ॉल्ट तर्क को परिभाषित)

वस्तु MapArea, विधि के कई अतिभारित विकल्प में

addAnim डिफ़ॉल्ट तर्क परिभाषित करें।

तो हाँ, वे करते हैं! तो क्या? मैं इस के दर्शन समझ में नहीं आता ...

अद्यतन:

यह पता चला एक स्थिति है जहाँ संकलक जो विधि का चयन करने के लिए (के रूप में टोमाज़ Nurkiewicz से कहा) पता नहीं कर सकते हैं हो सकता है कि , ठीक है, मैं समझता हूं .. लेकिन मेरी स्थिति में इन दो विधियों को स्पष्ट रूप से प्रतिष्ठित किया जा सकता है। यहाँ कोड का सटीक टुकड़ा (सभी मूल नाम और सामान के साथ इस समय संरक्षित) है:

def addAnim (name: String, x: Float, y: Float, tex: Buffer[Texture], fps: Int, percent: Float = 0): TImageSequence = 
    addAnim (name, x, y, tex(0).getImage.getWidth, tex(0).getImage.getHeight, tex, fps, percent) 

    def addAnim (name: String, x: Float, y: Float, w: Float, h: Float, tex: Buffer[Texture], fps: Int, percent: Float = 0): TImageSequence = { 
    // do stuff 
    } 
+2

ऐसा लगता है जैसे स्कैला इस सुविधा को अस्वीकार्य अस्पष्टता बनाने की संभावना के कारण अस्वीकार करता है, भले ही कुछ मामलों अस्पष्ट नहीं हैं। ऐसा होने पर, आपके विकल्प आपके कार्यों को अलग-अलग नाम देने या स्कैला प्रोजेक्ट के साथ फीचर अनुरोध दर्ज करने के लिए हैं। – Ben

+1

भले ही आपके मामले में, यह ठीक से काम कर सकता है, यह न भूलें कि अन्य लक्षण आपके प्रकार के साथ संयुक्त किए जा सकते हैं। इससे अधिक अस्पष्टताएं आ सकती हैं। स्कैला डेवलपर्स द्वारा लिया गया निर्णय मेरे लिए थोड़ा सख्त लगता है, और मैं इस धारणा को साझा करता हूं कि ऐसा लगता है कि इसे कुछ हद तक कम किया जा सकता है। लेकिन, हे, इस तरह यह है। जैसा कि @ बेन ने इंगित किया है, आप हमेशा एक सुविधा अनुरोध दर्ज कर सकते हैं। – Madoc

उत्तर

9

डिफ़ॉल्ट पैरामीटर और उसी नाम के साथ दो विधियां संभव नहीं है। स्कैला लक्ष्य विधि के नाम के आधार पर नामों के साथ डिफ़ॉल्ट मान प्राप्त करने के तरीकों को उत्पन्न करता है, इसलिए कुछ प्रकार की नाम टक्कर हो सकती है।

scala> object Test { 
    | def m(i: String = "Default value") {} 
    | } 
defined module Test 

scala> Test.`m$default$1` 
res0: String = Default value 
5

आप अपने कोड नहीं दिखा रहे हैं, लेकिन यहाँ एक सरल उदाहरण है:

object C { 
    def addAnim(x: Int = 42) {} 
    def addAnim(y: String = "abc") {} 
} 

मैं अब तो कॉल करें:

C.addAnim() 

किस विधि को लागू किया जाना चाहिए? ऑब्जेक्ट C संकलित नहीं होगा क्योंकि संकलक अनुमान लगाने में सक्षम नहीं है कि addAnim विधि का कोई मतलब नहीं है जब आप कोई तर्क प्रदान नहीं करते हैं।

+0

अपडेट देखें .. – noncom

3

क्यों डब्ल्यू और एच वैकल्पिक बनाकर दोनों तरीकों को एक साथ जोड़ना नहीं है, उदा।

def addAnim (name: String, 
    x: Float, y: Float, 
    tex: Buffer[Texture], 
    fps: Int, 
    percent: Float = 0, 
    w: Float = Float.NaN, h:Float = Float.NaN): TImageSequence 
संबंधित मुद्दे