for 的文档comp
说明它从最右边的函数开始,将参数应用于它,然后将结果提供给下一个函数,依此类推。因此,这里的数字首先相加,然后str
应用于整数 16:
((comp str +) 8 8) ;;=> "16"
此代码来自core.async
网络研讨会中的示例 7 :
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
呢?
回答在 25:30 的视频中,Rich Hickey 说“传感器损坏comp
或类似的东西”——然后他解释了这个问题。谢谢@nblumoe