В python, если вы зацикливаете (или потребляете)
вы даже не знаете, какой у вас есть. Таким образом, не имеет значения со стороны вызывающего абонента, если вы вернули или дали значения от вызываемого абонента для использования в вызывающем абоненте.
Однако, насколько я знаю в javascript, если вы хотите использовать выход, вы должны явно отметить функцию * звездочкой и не можете обрабатывать вычисленное значение так же, как "возвращаемое значение регулярной функции" на стороне вызывающего абонента.
Есть ли абстракция в javascript, чтобы скрыть эти различия, чтобы получить ту же красивую абстракцию, что и у python?
В JavaScript существует несколько конструкций, в которых вызывающему абоненту не нужно знать, является ли вызываемая функция генератором или простой функцией, возвращающей массив, строку, карту и т.д. Эти возвращаемые значения имеют общее значение, что они повторяемы.
Вот два примера того, как вы можете обработать возвращаемое значение такой функции:
Итерируйте через значения:
for (let x of f()) {
// ...
}
В зависимости от того, что возвращает f()
, x
будет следующим:
Создайте массив из значений:
const copy = Array.from(f());
Или также:
const copy = [...f()];
NB: хорошая вещь из Array.from
заключается в том, что она принимает функцию обратного вызова в качестве второго аргумента: для каждого значения используется mapper.
Распространение значений в качестве аргументов другой функции
Если значения являются численными:
Math.min(...f());
Поскольку Math.min
может принимать несколько аргументов (не только два), это дает минимальное значение целой серии (как min
в Python).
Подробнее об итераторах и итерациях на MDN
*
часть ссылки. Этот должен идти туда, куда ты хотел.