수색…
비고
컴파일러가 foreach를 발견하면
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++;
}
}
피보나치의 예를 보려면 D 둘러 보기를 참조하십시오.
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow