tee3
한 번의 순회로 세 개의 폴드를 굴립니다 — 리덕션이 하나 더 붙은 tee.
typedef Fold<A, R> = ({R seed, R Function(R acc, A a) step});
(R1, R2, R3) tee3<A, R1, R2, R3>(Iterable<A> iterable, Fold<A, R1> first, Fold<A, R2> second, Fold<A, R3> third)
강의
tee3는 폴드가 하나 더 붙은
tee입니다.
tee 페이지가 설명하는 내용은 그대로
적용됩니다 — 다음 원소를 당기기 전에 각 원소가 모든 누산기를
전진시키므로 소스는 정확히 한 번만 순회되고 버퍼링도 없으며, 누산기들은
서로 독립적이고 타입이 같을 필요도 없고, 리더는 파이프라인이 아니라
폴드여야 합니다. 그 이유와,
fork가 더 나은 선택인 경우는 그
페이지를 먼저 읽어 보세요.
Dart에는 가변 제네릭이 없어서 각 항수(arity)가 별도의 함수가 됩니다 —
zip 옆에 zip3가 있는 것과
같은 이유입니다. 이름을 붙일 만한 경우는 둘과 셋까지이고, 그 이상이라면
직접 만든 작은 레코드나 클래스로 접으면서 평범한
fold를 쓰세요.
데모 · 한 번 읽어서 얻는 합계, 최댓값, 개수
sensor()는 자기가 내놓은 값의 수를 셉니다. 따로 세 번
순회했다면 reads는 18이 되지만, tee3는 6에서
멈춥니다: