खोज…


टिप्पणियों

यदि संकलक द्वारा एक फॉर्च का सामना किया जाता है

foreach (element; range) {

यह आंतरिक रूप से निम्नलिखित के समान लिखा गया है:

for (auto it = range; !it.empty; it.popFront()) {
    auto element = it.front;
    ...
}

कोई भी वस्तु जो उपरोक्त इंटरफ़ेस को पूरा करती है उसे इनपुट रेंज कहा जाता है और इस प्रकार एक प्रकार है जिसे इस पर प्रसारित किया जा सकता है:

struct InputRange {
    @property bool empty();
    @property T front();
    void popFront();
}

स्ट्रिंग्स और सरणियाँ रेंज हैं

import std.stdio;

void main() {
    auto s = "hello world";
    auto a = [1, 2, 3, 4];

    foreach (c; s) {
        write(c, "!"); // h!e!l!l!o! !w!o!r!l!d!
    }
    writeln();

    foreach (x; a) {
        write(x * x, ", "); // 1, 4, 9, 16, 
    }
}

एक नया इनपुट रेंज प्रकार बनाना

InputRange अवधारणा के तीन कार्य हैं, उदाहरण:

struct InputRange(T) {
    @property bool empty();
    @property T front();
    void popFront();
}

संक्षेप में, एक तरीका है

  1. जाँच करें कि क्या रेंज खाली है
  2. वर्तमान तत्व प्राप्त करें
  3. अगले तत्व पर जाएं

अपने खुद के टाइप को एक InputRange , हमें इन तीन कार्यों को लागू करना चाहिए। चलो वर्गों के अनंत अनुक्रम पर एक नज़र डालते हैं।

struct SquaresRange {
    int cur = 1;

    @property bool empty() {
        return false;
    }

    @property int front() {
        return cur^^2;
    }

    void popFront() {
        cur++;
    }
}

फाइबोनैचि के साथ एक उदाहरण के लिए डी टूर देखें।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow