Я думаю, что вы должны завершить внутреннюю наблюдаемую, а не всю последовательность. (takeWhile должен быть передан по интервалу);
Вы должны использовать switchMap
только в том случае, если вы готовы отклонить старую последовательность, как только появится новое событие щелчка. mergeMap
или concatMap
в противном случае. ]
const sequence = () => interval(500).pipe(take(10));
fromEvent(button, 'click').pipe(
switchMap(sequence),
)
Смешивание обычно используется с множественным наследованием. Таким образом, в этом смысле «нет никакой разницы».
Суть в том, что Mix in редко используется как отдельный объект.
Например, скажем, у вас есть Mix In с именем ColorAndDimension, которое добавляет свойство цвета, ширину и высоту.
Теперь вы можете добавить ColorAndDimension, скажем, к классу формы, классу Sprite, классу автомобиля и т. д. И все они будут иметь одинаковый интерфейс (скажем, get / setColor, get / setHeight / Width и т. д.)
Итак, в общем случае наследование Mix in IS. Но вы можете утверждать, что это вопрос роли класса в общем домене относительно того, является ли Mix in "первичным" классом или просто смешанным.
Изменить - просто для пояснения.
Да, Mix In на современном современном жаргоне можно рассматривать как Интерфейс со связанной Реализацией. На самом деле это обычное, старое, повседневное множественное наследование с использованием простого, старого, повседневного класса. Это просто конкретное приложение MI. Большинство языков не имеют особого статуса Mix In, это просто класс, который был разработан для «смешивания», а не для использования отдельно.
подмешивание - это особый, ограниченный случай (множественного) наследования, используемый для целей реализации; некоторые языки (например, Ruby) поддерживают его без поддержки обобщенного множественного наследования.
«Миксин - это фрагмент класса в том смысле, что он предназначен для создания с другими классами или миксинами». -DDJ
Примесь - это класс или фрагмент кода, который не предназначен для автономного использования, но вместо этого вы должны использовать его внутри другого класса. Либо составьте его как поле / переменную члена, либо как сегмент кода. Я больше всего знаком с последним. Это немного лучше, чем копирование и вставка шаблонного кода.
Вот отличная статья DDJ, которая знакомит с этой темой.
Half-Life 2 / "Source" SDK - отличный пример миксинов C ++. В этой среде макросы определяют значительные блоки кода, которые могут быть добавлены, чтобы придать классу особый «вкус» или функцию.
Посмотрите на пример исходной вики: Создание логической сущности . В примере кода макрос DECLARE_CLASS можно рассматривать как миксин. Source SDK широко использует миксины для стандартизации кода доступа к данным и описания поведения сущностей.