comp
的文档声明它以最右边的函数开始,将参数应用于它,然后将结果提供给下一个函数,依此类推。因此,这里先添加数字,然后将str
应用于整数16:
((comp str +) 8 8) ;;=> "16"
此代码来自core.async
webinar中的示例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
最右边的函数参数?
回答在video 25:30,Rich Hickey说"传感器毁了comp
或类似的东西" - 之后他解释了这个问题。谢谢@nblumoe
答案 0 :(得分:2)