Я читаю книгу о Clojure, и в примере они хотят поместить данные в канал.Тем не менее, автор упоминает, что core.async блокируется для случайного ожидания, и указывает, что функция random-add отвечает за переход в спящий режим случайное число раз.Я пытался просмотреть Clojure Docs и не могу найти информацию об асинхронности / переходе в режим сна.И больше всего меня смутило то, что автор сказал об этой функции random-add.
"Это случайное количество времени будет функцией с именем random-add. Она использует функцию rand-int, которая выбираетслучайное целое число от 0 до 100 000. Затем оно использует его в функции, которая будет суммировать вектор, заполненный числом 1 случайной длины "
, что для меня не имеет смысла, потому что (repeat 1 (rand-int 100000))
сначала вернет список из 1 случайного числа в указанном диапазоне, а затем список будет соединен с вектором, а затем Reduce + фактически вернет список из 1 элемента.
(ns async-tea-party.core
(:require [clojure.core.async :as async]))
(def google-tea-service-chan (async/chan 10))
(def yahoo-tea-service-chan (async/chan 10))
(defn random-add []
(reduce + (conj [] (repeat 1 (rand-int 100000)))))
(defn request-google-tea-service []
(async/go
(random-add)
(async/>! google-tea-service-chan
"tea compliments of google")))
(defn request-yahoo-tea-service []
(async/go
(random-add)
(async/>! yahoo-tea-service-chan
"tea compliments of yahoo")))
(defn request-tea []
(request-google-tea-service)
(request-yahoo-tea-service)
(async/go (let [[v] (async/alts!
[google-tea-service-chan
yahoo-tea-service-chan])]
(println v))))```
No errors, just don't quite understand how this code makes any sense, especially with "async/go (random-add)" because (random-add) returns a list?