clojure core.async

En Clojure(core.async) ¿cuál es la diferencia entre alts y alt?



(1)

No puedo entender la diferencia entre:

alts!

y

alt!

en core.async de Clojure.


alts! es una función que acepta un vector de canales para tomar desde y / o canales con valores para ser puestos en ellos (en la forma de vectores de doubleton: [cv] ). El vector puede construirse dinámicamente; El codigo de llamadas alts! puede que no sepa cuántos canales escogerá entre ellos (y de hecho, ese número no necesita ser constante en todas las invocaciones).

alt! es una macro de conveniencia que básicamente actúa como un cruce entre cond y alts! . En este caso, el número de "puertos" (canales o pares de canal + valor) debe conocerse de forma estática, pero en la práctica este es un caso bastante frecuente y la sintaxis similar a cond es muy clara.

alt! ¡Se expande a una expresión algo elaborada usando alts! ; Aparte de la conveniencia sintáctica, no ofrece ninguna funcionalidad adicional.