स्कैला 2.8 में केस क्लास के कन्स्ट्रक्टर को अधिभारित करने का कोई तरीका है?ओवरलोड कन्स्ट्रक्टर?
यदि हां, तो कृपया एक स्निपेट डालने के लिए, अगर नहीं, तो कृपया बताएं क्यों?
स्कैला 2.8 में केस क्लास के कन्स्ट्रक्टर को अधिभारित करने का कोई तरीका है?ओवरलोड कन्स्ट्रक्टर?
यदि हां, तो कृपया एक स्निपेट डालने के लिए, अगर नहीं, तो कृपया बताएं क्यों?
ओवरलोडिंग कंस्ट्रक्टर्स मामले वर्गों के लिए विशेष नहीं है।
object Foo {
def apply(bar: Int) = new Foo(bar)
}
Foo(1, 2)
Foo(1)
स्कैला 2.8 में, नाम और डिफ़ॉल्ट पैरामीटर का अधिभार अधिभार के बजाय अक्सर उपयोग किया जा सकता है।
case class Baz(bar: Int, baz: Int = 0)
new Baz(1)
Baz(1)
आप एक अधिभारित कन्स्ट्रक्टर को सामान्य तरीके से परिभाषित कर सकते हैं, लेकिन इसे आमंत्रित करने के लिए आपको "नया" कीवर्ड का उपयोग करना होगा। ,
case class Foo(bar: Int, baz: Int) {
def this(bar: Int) = this(bar, 0)
}
new Foo(1, 2)
new Foo(1)
हालांकि आप भी साथी वस्तु है, जो कहा जाता है जब आप new
छोड़ में apply
विधि ओवरलोड पसंद कर सकते हैं:
scala> case class A(i: Int) { def this(s: String) = this(s.toInt) }
defined class A
scala> A(1)
res0: A = A(1)
scala> A("2")
<console>:8: error: type mismatch;
found : java.lang.String("2")
required: Int
A("2")
^
scala> new A("2")
res2: A = A(2)
कि सख्ती से सच नहीं है - आप साथी वस्तु में यह घोषणा कर सकते हैं के रूप में सामान्य –
बहुत अच्छा :) मैं स्केला में वापस आने मूल्यों की तरह कुछ के लिए देख रहा था, यह 2.8 से नई है? मुझे नहीं पता था :) – Felix
हाँ, नामांकित और डिफ़ॉल्ट पैरामीटर स्कैला 2.8 में नए हैं। – retronym
मार्टिन ओडर्स्की बताते हैं कि अतिरिक्त लागू विधियों को स्वचालित रूप से क्यों नहीं जोड़ा जाता है: http://www.scala-lang.org/node/976 –