D Language
सीमाओं
खोज…
टिप्पणियों
यदि संकलक द्वारा एक फॉर्च का सामना किया जाता है
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();
}
संक्षेप में, एक तरीका है
- जाँच करें कि क्या रेंज खाली है
- वर्तमान तत्व प्राप्त करें
- अगले तत्व पर जाएं
अपने खुद के टाइप को एक 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