मैं इस प्रश्न को पूरी तरह से समझ नहीं पा रहा हूं, लेकिन यहां कुछ स्पष्टीकरण दिया गया है। require
एक Predef
में संस्करण अतिभारित है:
def require(requirement: Boolean) //...
def require(requirement: Boolean, message: => Any) //...
दूसरा एक थोड़ा message: => Any
प्रकार की वजह से भ्रामक है। यह शायद आसान है, तो यह केवल था होगा:
def require(requirement: Boolean, message: Any) //...
दूसरा पैरामीटर निश्चित रूप से एक संदेश है कि संदेश त्रुटि के लिए करता है, तो दावे को पूरा नहीं कर रहा है संलग्न किया जा के लिए लगता है है। आप कल्पना कर सकते message
String
प्रकार का होना चाहिए, लेकिन Any
साथ आप बस लिख सकते हैं:
require(x == 4, x)
कौन सा एक त्रुटि संदेश में x
(प्रकार Int
की) के वास्तविक मूल्य जोड़ देगा अगर यह 4
के बराबर नहीं है। यही कारण है कि Any
चुना गया था - मनमाना मूल्य की अनुमति के लिए।
लेकिन : =>
भाग के बारे में क्या? इसे नाम नाम से कॉल किया जाता है और मूल रूप से इसका अर्थ है: इस पैरामीटर का मूल्यांकन जब इसे तक पहुंचाया जाता है। निम्नलिखित स्निपेट कल्पना कीजिए:
require(list.isEmpty, list.size)
इस मामले क्या आप वाकई list
खाली है दिखाना चाहते हैं - और अगर ऐसा नहीं है, त्रुटि संदेश के वास्तविक list
आकार जोड़ें। हालांकि सामान्य कॉल सम्मेलन के साथ list.size
भाग से पहले मूल्यांकन किया जाना चाहिए विधि - जिसे अपमानजनक हो सकता है।नाम से कॉल करें सम्मेलन list.size
केवल पहली बार इसका मूल्यांकन किया जाता है - जब त्रुटि संदेश कन्स्ट्रक्टर (यदि आवश्यक हो)।
स्रोत
2012-05-20 11:50:23
परिभाषा के साथ क्या गलत है? '" foo "==" bar "' एक 'बूलियन' मान है और' स्ट्रिंग ''Any' (जैसा कि _any_ प्रकार करता है) के अनुरूप है। – Tharabas
सवाल यह है कि क्यों एक स्ट्रिंग दूसरे तर्क के लिए वैध प्रकार है, जबकि हस्ताक्षर कहते हैं कि इसे एक समारोह 'संदेश होना चाहिए: => कोई भी' –