मैं std.range से टेक फ़ंक्शन के रिटर्न वैल्यू का एक टुकड़ा प्राप्त करने के लिए स्लाइस ऑपरेटर का उपयोग करने का प्रयास कर रहा हूं। मेरे कोड:स्लाइस ले नहीं सकते! डी में std.range से आर?
auto tempChunk = ['a', 'b', 'c', 'd'];
auto a = tempChunk.take(3);
writeln(a[0..2]);
ले लो के रूप में इस मामले में आर सिर्फ चार [] के लिए एक उपनाम है, मैं इस संकलन उम्मीद थी। हालांकि, संकलक मुझे बताता है कि Take!(char[]) cannot be sliced with []
। एक और उदाहरण लेते हुए:
int[] arr1 = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];
auto s = arr.take(5);
writeln(s[0..4]);
यह संकलन और एक समस्या के बिना चलेंगे, मुद्रण [1, 2, 3, 4, 5]। मैं इस बिंदु पर पूरी तरह उलझन में हूं कि पहला उदाहरण क्यों काम नहीं करेगा, जबकि दूसरा करता है।
धन्यवाद, यह इसे साफ़ करता है। हालांकि, टेक स्ट्रक्चर एक ओप इंडेक्स को परिभाषित करता है, फिर भी जब मैं 'readeln (a [0]) आज़माता हूं;', यह काम नहीं करता है। इसका कारण क्या है? – Meta
यह केवल RandomAccessRange के लिए opIndex को परिभाषित करता है, जो संकीर्ण तार नहीं हैं। यह तर्क मैं समझ नहीं पा रहा हूं, ईमानदार होने के नाते, वास्तव में देशी स्लिमिंग के माध्यम से एक यादृच्छिक अभिगम कोड बिंदु सीमा के रूप में संकीर्ण तारों के रूप में _are_ उपयोग योग्य है। यह एक अच्छा सवाल है। –
पीएस मैं डी टैग या डी और डी 2 दोनों का उपयोग करने की सलाह देता हूं, क्योंकि डी फ़ीड के लिए बहुत अधिक लोग सदस्यता लेते हैं। –