Подтвердить что ты не робот

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

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

alts!

и

alt!

в Clojure core.async.

4b9b3361

Ответ 1

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

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

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