2012-03-15 5 views
7

यह कोड अपवाद क्यों फेंकता है?स्केल में अपवाद जब मेरी खुद की विधि को परिभाषित करता है

val x = new { def toInt(n: Int) = n*2 } 
x.toInt(2) 
scala.tools.nsc.symtab.Types$TypeError: too many arguments for method toInteger: (x$1: java.lang.Object)java.lang.Integer 
     at scala.tools.nsc.typechecker.Contexts$Context.error(Contexts.scala:298) 
     at scala.tools.nsc.typechecker.Infer$Inferencer.error(Infer.scala:207) 
     at scala.tools.nsc.typechecker.Infer$Inferencer.errorTree(Infer.scala:211) 
     at scala.tools.nsc.typechecker.Typers$Typer.tryNamesDefaults$1(Typers.scala:2350) 
     ... 

मैं स्केला 2.9.1.final उपयोग कर रहा हूँ

+0

चूंकि यह एक कंपाइलर बग है, इसलिए मैं [स्केल के मुद्दे ट्रैकर] (https://issues.scala-lang.org/secure/Dashboard.jspa) में एक बग रिपोर्ट दर्ज करके स्कैला को बेहतर बनाने की सलाह देता हूं। – leedm777

+0

2.10 ट्रंक पर क्रैश नहीं होता है। – soc

उत्तर

3

जाहिर है एक संकलक बग (संकलक क्रैश, और आरईपीएल आप That entry seems to have slain the compiler. बताता है)। यह संकेत नहीं दे रहा है कि आपके कोड में कुछ भी गलत है।

आप प्रकार AnyRef{def toInt(n: Int): Int} का एक उदाहरण बना रहे हैं, तो एक सिंगलटन वस्तु बनाने के रूप में केली पता चलता है कि इसके बारे में जाने के लिए एक बेहतर तरीका हो सकता है। या एक नामांकित वर्ग/विशेषता बनाएं जिसे आप बीमा करते हैं, जो ठीक काम करता है।

2

संपादित करें: के रूप में लुइगी Plinge सुझाव दिया है, यह एक संकलक बग है।

शायद तुम कुछ इस तरह चाहते हैं ...

object x { 
    def toInt(n:Int) = n * 2 
} 

scala> x.toInt(2) 
res0: Int = 4 
+0

"scalas toInt" से आपका क्या मतलब है? नया {} में कोई तरीका नहीं है जिसे मैं ओवरराइड कर सकता हूं। मैंने केवल उस विधि को परिभाषित किया है जिसे मैंने परिभाषित किया है। – SpiderPig

संबंधित मुद्दे