В Clojure (core.async) какая разница между alts и alt?

Я не могу понять разницу между:

alts!

а также

alt!

в ядре Clojure. async.

1 ответ

Решение

alts! является функцией, которая принимает вектор каналов, из которых должны быть взяты данные, и / или каналы со значениями, которые должны быть на них помещены (в виде векторов-дублетов: [c v]). Вектор может быть динамически построен; код вызова alts! может не знать, сколько каналов он выберет (и действительно, это число не обязательно должно быть постоянным при каждом вызове).

alt! это удобный макрос, который в основном действует как нечто среднее между cond а также alts!, Здесь число "портов" (каналов или пар "канал + значение") должно быть известно статически, но на практике это довольно часто и cond-подобный синтаксис очень понятен.

alt! расширяется до несколько сложного выражения, используя alts!; кроме синтаксического удобства, он не предлагает никакой дополнительной функциональности.

Другие вопросы по тегам