2015-11-19 8 views
6

स्काला के अनुसार Section 4.6.3 विनिर्देश:बार-बार पैरामीटर के साथ स्कैला अनुभाग में डिफ़ॉल्ट तर्कों की अनुमति क्यों नहीं है?

यह एक दोहराया पैरामीटर के साथ एक पैरामीटर अनुभाग में किसी भी डिफ़ॉल्ट तर्क को परिभाषित करने के लिए अनुमति नहीं है।

वास्तव में, यदि मैं निम्नलिखित मामले वर्ग को परिभाषित:

case class Example(value: Option[String] = None, otherValues: String*) 

परिणाम मैं उम्मीद है विनिर्देश के अनुसार:

error: a parameter section with a `*'-parameter is not allowed to have default arguments 
    case class Example(value: Option[String] = None, otherValues: String*) 

लेकिन सवाल यह क्यों है अनुमति नहीं हैं? कक्षा का पहला तर्क बार-बार तर्क से पूरी तरह से स्वतंत्र है, तो यह प्रतिबंध क्यों है?

उत्तर

6

क्योंकि आप ऐसा कर सकता है:

case class Example(value: String = "default", otherValues: String*) 

और अब अगर आप Example("Hello", "world") फोन करता है पहले "Hello"value करने के लिए या otherValues के अंतर्गत आता है?

आप तर्क दे सकते हैं कि आपके उदाहरणों में प्रकार अलग हैं, लेकिन नियमों का पालन करने के लिए बहुत जटिल हो गए हैं। उदाहरण के लिए बार-बार पैरामीटर Any प्रकार के साथ प्रयोग किया जाता है। यह उदाहरण case class Example(value: Option[String] = None, otherValues: Any*) में विभिन्न प्रकार हैं, लेकिन फिर भी एक ही समस्या के साथ संघर्ष करते हैं

+0

सही, कुल समझ में आता है। जवाब पढ़ने के बाद यह इतना स्पष्ट प्रतीत होता है कि मुझे खुद को समझने के लिए थोड़ा मूर्ख नहीं लगता :) – djsecilla

+1

यह अस्पष्टता केवल एक अस्पष्टता है यदि आप इसे चाहते हैं। आपका उदाहरण रुबी में पूरी तरह से ठीक काम करता है, उदाहरण के लिए, और रुबी के पास इसका मार्गदर्शन करने वाले प्रकारों का लाभ भी नहीं है। रूबी भी शुरुआत और अंत में (स्थितित्मक) पैरामीटर सूची के अंत में अनिवार्य स्थितित्मक पैरामीटर की अनुमति देता है। असल में, शुरुआत में अनिवार्य स्थितित्मक पैरामीटर पहले बाएं से दाएं बाध्य होते हैं, फिर अंत में बाएं से दाएं अनिवार्य स्थितित्मक पैरामीटर, फिर वैकल्पिक स्थितित्मक पैरामीटर बाएं से दाएं, फिर शेष स्थितित्मक पैरामीटर। –

+3

यह सब अनिवार्य कीवर्ड पैरामीटर, वैकल्पिक कीवर्ड पैरामीटर, और आखिरकार बाकी कीवर्ड पैरामीटर के बाद होता है। इसलिए, कारण जरूरी नहीं है कि "इसे स्पष्ट नहीं किया जा सकता", बल्कि "इसे स्पष्ट बनाना, शेष भाषा की सादगी के साथ अच्छी तरह फिट नहीं है"। इसलिए, अगर हम रूबी नियमों का पालन करते हैं, तो 'हैलो' '' मूल्य 'और 'सेक (" दुनिया ") से जुड़ा हुआ है,' रुबी नियमों का पालन करता है 'और कोई अस्पष्टता नहीं है। –

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

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