Предположим, c
является каналом размера n
. Я пытаюсь написать функцию в clojure (script), которая проверяет, заполнен ли c
и, если это так, закрывает канал.Проверка целостности канала Clojure (Script)
Но как проверить, заполнен ли канал?
Предположим, c
является каналом размера n
. Я пытаюсь написать функцию в clojure (script), которая проверяет, заполнен ли c
и, если это так, закрывает канал.Проверка целостности канала Clojure (Script)
Но как проверить, заполнен ли канал?
core.async предлагает пару функций для этого:
Таким образом, вы могли бы написать что-то вроде:
(if-not (offer! my-chan 42)
(close! my-chan))
который бы выполнить это, когда вы кладете что-то на канале. Скорее всего, это безопаснее, чем попытка увидеть другой процесс на тот момент, когда он будет заполнен, а затем закроет его. Если вы действительно хотите просто проверить, если она полна вы можете извлечь буфер и спросить его:
user> (->> (async/chan (async/buffer 1))
(.buf)
(.full?))
false
, хотя думаю, что один через тщательно первым.
К сожалению, моя программа заслуживает второго подхода (но полезно узнать о предложении! И опросе!). Проблема в том, что поставляемый фрагмент кода не работает в ClojureScript. У каналов есть метод .buf в контексте CLJS? – George
Nevermind: получается, что использование '(count (.-Buf (chan)))' делает трюк в ClojureScript. – George