2016-09-05 15 views

ответ

0

только для отладки, вы можете использовать что-то похожее на функцию ниже, чтобы наблюдать значение на канале фактически не take! ИНГ его (Предупреждение: это во многом зависит от core.asyncimplementationdetails):

(defn peek [ch] 
    (if (and (.buf ch) 
      (pos? (count (.buf ch)))) 
    (if (instance? clojure.core.async.impl.buffers.PromiseBuffer 
        (.buf ch)) 
     (a/<!! ch) 
     (last (.buf (.buf ch)))) 
    (some-> ch .puts first second))) 

core.async сам по себе не предоставляет общедоступный API для peek исходящего значения из канала.

Как отмечено @amalloy, функция выше может не работать для других видов буферов, в частности для тех, у которых нет buf объявленного поля.

+0

спасибо ... Я дам ему попробовать – interstar

+0

Даже если вы проверяете 'PromiseBuffer', я думаю, вы должны дать более сильное предупреждение, чем« это зависит от деталей реализации ». Используемые протоколы core.async открыты, поэтому каждый мог создать новый вид канала с разными внутренними элементами, который не будет иметь поле 'buf' для просмотра. – amalloy

+0

@amalloy это правильно. обновлено. – OlegTheCat

 Смежные вопросы

  • Нет связанных вопросов^_^