3
comp
的文檔聲明它從最右邊的函數開始,將參數應用到它,然後將結果提供給下一個函數等等。因此這裏的數字首先加入然後str
施加到整數16:Clojure - 當`comp`從右向左移動時,它是如何工作的?
((comp str +) 8 8) ;;=> "16"
此代碼是從實施例7中的core.async
webinar:
mouse (events->chan js/window EventType.MOUSEMOVE
(chan 1
(comp (map mouse-loc->vec)
(filter (fn [[_ y]] (zero? (mod y 5)))))))
這裏鼠標事件流是參數。它們首先被轉換成一對(元組2向量),然後這些對被過濾。 map
函數(恰好是傳感器)需要在filter
函數之前接收鼠標事件,顯然這是實際發生的,因爲此代碼有效。那麼爲什麼第一個操作(map
函數)不是comp
的最右邊的函數參數呢?
回答在video在25:30富希基說:「傳感器毀comp
或類似的東西」 - 之後他解釋了這個問題。由於@nblumoe