तो, "प्रभावशाली के लिए स्कैला" के माध्यम से अपना रास्ता काम करते समय मैंने खुद को आश्चर्यचकित कर दिया: क्या आप अनुक्रम के बिना लूप के लिए स्कैला का उपयोग कर सकते हैं?अनुक्रम के बिना स्कैला में लूप के लिए?
उदाहरण के लिए, पुस्तक में एक अभ्यास है जो आपको काउंटर ऑब्जेक्ट बनाने के लिए कहता है जिसे Integer.MAX_VALUE से पहले नहीं बढ़ाया जा सकता है।
var c = new Counter
for(i <- 0 to Integer.MAX_VALUE) c.increment()
यह एक त्रुटि फेंकता है: दृश्यों Int.MaxValue तत्वों की तुलना में अधिक नहीं हो सकते आदेश मेरा समाधान का परीक्षण करने के लिए, मैं निम्नलिखित कोड लिखा था। ऐसा लगता है कि इसका मतलब है कि स्कैला पहले अनुक्रम वस्तु को आवंटित और पॉप्युलेट कर रहा है, इन्टर्जर.मैक्सवेल्यू के माध्यम से मान 0 के साथ, और उसके बाद उस अनुक्रम ऑब्जेक्ट पर फ़ोरैच लूप कर रहा है।
मुझे लगता है मैं इस के बजाय कर सकता है कि:
var c = new Counter
while(c.value < Integer.MAX_VALUE) c.increment()
लेकिन वहाँ बयान के लिए के साथ पाश के लिए एक पारंपरिक सी शैली करने के लिए कोई तरीका है?
वाह, एक चुनौतीपूर्ण उत्तर है, लेकिन एक अच्छा है। मैं सिर्फ स्कैला सीख रहा हूं, इसलिए आपने बहुत सी शर्तों का उपयोग किया है कि मैं केवल मुश्किल से परिचित हूं, लेकिन धन्यवाद। –
'से'' की परिभाषा को 'स्ट्रीम' (या' इटरेटर') साथी ऑब्जेक्ट पर 'iterate' विधि का उपयोग करके और सरल बनाया जा सकता है। कुछ के साथ कुछ: 'def से करने के लिए (से: Int, to: Int) = Stream.iterate (से, से - से) (_ + 1) '। लेकिन 'से लेकर तक' का उपयोग करना अधिक मूर्खतापूर्ण है और एक ही चीज़ प्राप्त करता है। –