कुछ स्थानों (उदा। Form.bindFromRequest
) निहित पैरामीटर सूची से पहले एक खाली पैरामीटर सूची का उपयोग करें। क्यूं कर? आईएमएचओ, पैरामीटर स्पष्ट रूप से form.bindFromRequest()(request)
में पारित होने पर अतिरिक्त कोष्ठक की आवश्यकता होने का नुकसान होता है। सुनिश्चित नहीं है कि तब लाभ क्या है?स्कैला - निहित सूची से पहले एक खाली तर्क सूची क्यों घोषित की जाती है
उत्तर
पैरामीटर सूची के साथ def
कोई पैरामीटर सूची वाला एक अलग प्रकार है। यह प्रत्यक्ष आमंत्रण के तहत कोई फर्क नहीं पड़ता है, लेकिन यदि आप उस विधि को किसी अन्य विधि के तर्क के रूप में पास करते हैं, तो यह करता है।
उदाहरण में, यदि आप ऐसा तरह अपने विधि को परिभाषित:
def func1 = { println("Hello"); 1 }
आप इसे इस विधि को पारित नहीं कर सकते हैं:
def consume(f:() => Double) = // ...
यह है के रूप में प्रकार, बस डबल है एक बहुत ही आलसी यद्यपि एक। दूसरी ओर इस समारोह ठीक काम करेगा:
def func2() = { println("Hello"); 2 }
मैं यह नहीं कह रहा हूँ यह स्पष्ट कारण है कि वे इसे किया था, लेकिन अगर वे एक वास्तविक कारण था, यह लगभग निश्चित रूप से टाइप करने के लिए जोड़ दी जाएंगी।
संपादित करें:
व्यावहारिक दृष्टि से उन दोनों के बीच अंतर यह ज्यादातर जहां वे इस्तेमाल किया जा सकता करने के लिए नीचे आता है।
कॉल-बाय-वैल्यू आइटम केवल फ़ंक्शन/विधि (afaik) पर पैरामीटर सूची में उपयोग किया जा सकता है। चूंकि इसे केवल पैरामीटर सूची में ही पारित किया जा सकता है, इसलिए आप इसे एक चर में संग्रहीत नहीं कर सकते हैं और इसे एकाधिक स्थानों में उपयोग नहीं कर सकते हैं (इसे T
के स्पष्ट उदाहरण में बदलने के बिना)।
और जैसा कि आप यहाँ देख सकते हैं, वे परस्पर विनिमय दर असल नहीं हैं:
scala> def f(s: => String) { println(s) }
f: (s: => String)Unit
scala> def s1 =() => { "Hello" }
s1:() => String
scala> f(s1)
<console>:10: error: type mismatch;
found :() => String
required: String
f(s1)
^
तो कल्पना मैं कॉलबैक है कि उपयोगकर्ताओं को मेरे पास से गुजरती हैं की एक सरणी स्टोर करने के लिए करना चाहता था .. मैं यहाँ => T
उपयोग नहीं कर सकते :
scala> val a: Array[=> Int] = Array()
<console>:1: error: identifier expected but '=>' found.
val a: Array[=> Int] = Array()
^
scala> val a: Array[() => Int] = Array()
a: Array[() => Int] = Array()
तो अगर मैं ऐसी वस्तुओं की दुकान, और उन्हें आंतरिक रूप से चारों ओर से पारित, => T
का उपयोग कर (और यह lazily का मूल्यांकन रखते हुए) करना चाहते हैं एक विकल्प नहीं है।
मुझे लगता है कि =>
=> T
और () => T
में एक ही चीज़ के रूप में नहीं सोचना सबसे अच्छा है। आशा है इससे थोडी मदद मिलेगी।
सच है, लेकिन आप 'डीई उपभोग (एफ: => डबल) ' के रूप में उपभोग को परिभाषित कर सकते हैं जो आपके उपभोग के बराबर है, है ना? –
वह नाम पैरामीटर द्वारा एक पास है जो फ़ंक्शन 1 नहीं है। –
क्षमा करें, मेरा मतलब है Function0। –
- 1. सूची है [i: j] सूची [j] सूची से पहले [i] सूची में एक खाली सूची होने की गारंटी है?
- 2. स्कैला "वैश्विक" कार्यों की एक सूची?
- 3. स्कैला - सूचीओं की सूची एक सूची में बदलें: सूची [सूची [ए]] सूची [ए]
- 4. JDK कार्यान्वयन() सूची आकार समानता पहले जांच नहीं की जाती
- 5. पायथन - फ़ंक्शन/तर्क टुपल्स की सूची
- 6. स्कैला। सूची
- 7. Argparse मुझे एक सूची में एक सूची क्यों देता है?
- 8. एक तर्क सूची
- 9. खाली शब्दकोशों की एक सूची बनाएं
- 10. एक तर्क सूची ((ERRORTYPE), XMPPError)
- 11. पायथन - सूची में पहले गैर-खाली आइटम की अनुक्रमणिका ढूंढना
- 12. खाली पैरामीटर सूची का क्या अर्थ है?
- 13. खाली सूची में जोड़ने से
- 14. प्रतिबिंब के माध्यम से एक सूची <T> सूची में निहित प्रकार प्राप्त करें?
- 15. स्कैला, एक सीमित सूची दोहराएं
- 16. सूची [:: - 1] बराबर सूची क्यों नहीं है [: लेन (सूची): - 1]?
- 17. क्यों एक क्रमबद्ध सूची एक अवर्गीकृत सूची
- 18. स्कैला: ऑब्जेक्ट्स की सूची में डुप्लीकेट हटाएं
- 19. हास्केल खाली आयात सूची()
- 20. पहले से ही एक अलग शाखा से फ़ाइल की जांच क्यों की जाती है?
- 21. अगर वस्तु पहले से ही एक सूची
- 22. सी # सूची गणना हमेशा खाली होती है जब सूची खाली होती है
- 23. स्कैला फ़्लैटन सूची
- 24. स्कैला सूची मैच
- 25. कैसे एक टेम्पलेट तर्क सूची
- 26. आईई: रिक्त, खाली सूची
- 27. iReport में किसी अन्य सूची में निहित तारों की एक सूची कैसे मुद्रित करूं?
- 28. स्कैला: सूची क्यों नहीं है [=> Int] काम करता है?
- 29. असफल साइडकीक नौकरियों की सूची उनके तर्क
- 30. वैक्टर की एक सूची से एक पुनरावर्ती सूची बनाएं
आपको इसे बिना किसी लिखने की अनुमति है, नहीं? आईएमओ जो बहुत भ्रमित व्यवहार का कारण बनता है, एक समान पहुंच सिद्धांत के लिए धन्यवाद - एक साधारण संपत्ति पहुंच की तरह दिखने से मनमाने ढंग से जटिल चीजें हो सकती हैं। – lmm
@lmm आप खाली पैरामीटर सूची के बिना यह वही विधि लिख सकते हैं (या फिर आरईपीएल में एक सरसरी प्रयास कहता है)। क्लास कन्स्ट्रक्टरों को स्वचालित रूप से एक खाली पैरामीटर सूची दी जाती है यदि केवल निहितार्थ परिभाषित किए जाते हैं, लेकिन विधियां उनके बिना ठीक काम करने लगती हैं। क्या ऐसा करने का अच्छा विचार है, मुझे नहीं पता। –
यह भी ध्यान दें कि यद्यपि विधि को निहित तर्कों से पहले एक खाली तर्क सूची के साथ परिभाषित किया गया है, फिर भी आप इसे कंपाइलर से किसी भी चेतावनी के बिना 'form.bindFromRequest' की तरह आमंत्रित कर सकते हैं।तो सबसे अधिक संभवतः समारोह को परिभाषित करते समय सम्मेलन का पालन करना बेहतर होता है लेकिन जब आप को आमंत्रित करते हैं तो आप ब्रैकेट को छोड़ सकते हैं (यदि विधि का कोई साइड इफेक्ट नहीं है, क्योंकि स्टाइल गाइड के मुताबिक ब्रैकेट को यह स्पष्ट करने के लिए बेहतर है कि एक साइड इफेक्ट इस समारोह को बुलाकर हो रहा है)। –