2010-07-28 11 views
10

में कन्स्ट्रक्टर पैरामीटर के दो सेट यह कोड क्या करता है? कन्स्ट्रक्टर पैरामीटर के दो सेट क्यों हैं?स्कैला वर्ग

class A(val x: Int)(val y: Int) 

मैंने किसी चीज़ को प्रारंभ कर सकते हैं और दोनों क्षेत्रों का उपयोग करें:

val a = new A(5)(7) 
println(a.x + ", " + a.y) 

अगर मैं इसे एक मामले वर्ग बनाने के लिए, मैं सिर्फ मानकों का पहला सेट से मिलान कर सकते हैं।

case class A(x: Int)(y: Int) 
val a = A(5)(7) 
a match { 
    A(x) => println(x) 
} 

पैरामीटर के 3 सेट बनाना संभव नहीं है। यह संकलित नहीं करता है। तो कन्स्ट्रक्टर पैरामीटर के दो सेट का अर्थ क्या है?

+1

यह कुछ नहीं है जो मैंने बनाया है। मुझे स्केल स्विंग लाइब्रेरी में यह निर्माण मिला: https://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/src/swing/scala/swing/event/MouseEvent.scala – PeWu

उत्तर

7

scala specification के अनुसार (धारा 5.3 देखें), पैरामीटर का दूसरा सेट निहित पैरामीटर को समर्पित है। दो सेटों में पैरामीटर को विभाजित करने से आप केवल गैर-निहित पैमीटर को परिभाषित कर सकते हैं और दूसरे को संदर्भित रूप से परिभाषित कर सकते हैं।

यह वास्तव में काफी अजीब बात है कि दूसरे सेट में कंपाइलर अपरिपक्व पैरामीटर accpeticit पैरामीटर।

+2

धन्यवाद। यदि मैं दूसरे सेट में _implicit_ कीवर्ड जोड़ता हूं, तो यह अंतर्निहित होना शुरू होता है, लेकिन यह _implicit_ कीवर्ड के बिना निहित रूप से अंतर्निहित नहीं है। वैसे भी, स्कैला विनिर्देश दूसरे सेट में गैर-निहित पैरामीटर की अनुमति नहीं देता है। – PeWu

+0

अच्छा ... spec का यह खंड बहुत अजीब लगता है: व्याकरण के ठीक नीचे दिया गया उदाहरण gramar के अनुरूप प्रतीत नहीं होता है। और "कक्षा परीक्षण (ए: इंट) (बी: इंट) (सी: इंट)" एक वैध वर्ग परिभाषा है। वाक्यांश के लिए – Nicolas

+1

@PeWu +1 "यह अंतर्निहित कीवर्ड के बिना अंतर्निहित रूप से अंतर्निहित नहीं है" :) – I82Much