В Clojure (core.async) какая разница между alts и alt?
1 ответ
alts!
является функцией, которая принимает вектор каналов, из которых должны быть взяты данные, и / или каналы со значениями, которые должны быть на них помещены (в виде векторов-дублетов: [c v]
). Вектор может быть динамически построен; код вызова alts!
может не знать, сколько каналов он выберет (и действительно, это число не обязательно должно быть постоянным при каждом вызове).
alt!
это удобный макрос, который в основном действует как нечто среднее между cond
а также alts!
, Здесь число "портов" (каналов или пар "канал + значение") должно быть известно статически, но на практике это довольно часто и cond
-подобный синтаксис очень понятен.
alt!
расширяется до несколько сложного выражения, используя alts!
; кроме синтаксического удобства, он не предлагает никакой дополнительной функциональности.