2015-11-09 29 views
3

comp的文檔聲明它從最右邊的函數開始,將參數應用到它,然後將結果提供給下一個函數等等。因此這裏的數字首先加入然後str施加到整數16:Clojure - 當`comp`從右向左移動時,它是如何工作的?

((comp str +) 8 8) ;;=> "16" 

此代碼是從實施例7中的core.asyncwebinar

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

回答

2

這裏是從傳感器文檔片斷,解釋行爲:

變壓器的運行構成從右到左,但建立施加轉換堆棧左到右

http://clojure.org/transducers(參見「用換能器定義變換」)

相關問題