Elixir-스트림

많은 함수는 열거 가능을 기대하고 list뒤. 즉, Enum을 사용하여 여러 작업을 수행하는 동안 각 작업은 결과에 도달 할 때까지 중간 목록을 생성합니다.

스트림은 enum에 의한 eager 작업과 달리 지연 작업을 지원합니다. 요컨대streams are lazy, composable enumerables. 이것이 의미하는 바는 스트림이 절대적으로 필요한 경우가 아니면 작업을 수행하지 않는다는 것입니다. 이것을 이해하기위한 예를 생각해 봅시다.

odd? = &(rem(&1, 2) != 0)
res = 1..100_000 |> Stream.map(&(&1 * 3)) |> Stream.filter(odd?) |> Enum.sum
IO.puts(res)

위의 프로그램이 실행되면 다음과 같은 결과가 생성됩니다.

7500000000

위에 주어진 예에서, 1..100_000 |> Stream.map(&(&1 * 3))1..100_000 범위의지도 계산을 나타내는 데이터 유형, 실제 스트림을 반환합니다. 아직이 표현을 평가하지 않았습니다. 중간 목록을 생성하는 대신 스트림은 기본 스트림을 Enum 모듈에 전달할 때만 호출되는 일련의 계산을 빌드합니다. 스트림은 무한 할 수있는 대규모 컬렉션으로 작업 할 때 유용합니다.

스트림과 열거 형에는 공통적으로 많은 기능이 있습니다. 스트림은 주로 입력 열거 형에 대한 계산을 수행 한 후 반환 값으로 목록을 생성 한 Enum 모듈에서 제공하는 것과 동일한 함수를 제공합니다. 그들 중 일부는 다음 표에 나열되어 있습니다.

Sr. 아니. 기능 및 설명
1

chunk(enum, n, step, leftover \\ nil)

각각 n 개의 항목을 포함하는 청크로 열거 형을 스트리밍합니다. 여기서 각각의 새 청크는 단계 요소를 열거 형으로 시작합니다.

2

concat(enumerables)

열거 형의 각 열거 형을 열거하는 스트림을 만듭니다.

each(enum, fun)

각 항목에 대해 주어진 기능을 실행합니다.

4

filter(enum, fun)

열거시 지정된 함수에 따라 요소를 필터링하는 스트림을 만듭니다.

5

map(enum, fun)

열거에 주어진 함수를 적용 할 스트림을 만듭니다.

6

drop(enum, n)

열거 가능 항목에서 다음 n 개 항목을 느리게 삭제합니다.