首页 > 解决方案 > Julia 中事件驱动代码的匿名函数和 foreach 用法

问题描述

我目前正在关注 Aurelien Geron ( https://github.com/ageron/julia_notebooks ) 的 Julia for pythonistas notebook,我对匿名函数章节与以下代码有点困惑:

handlers = []

on_click(handler) = push!(handlers, handler)

click(event) = foreach(handler->handler(event), handlers)

on_click() do event
    println("Mouse clicked at $event")
end

on_click() do event
    println("Beep.")
end

click((x=50, y=20))
click((x=120, y=10))

主要是我看不到如何on_click()得到eventfrom click()。任何人都可以对此有所了解吗?

标签: julia

解决方案


可能不明显的是如何handlers填充数组,即通过应用on_click()两次。

on_click(handler) = push!(handlers, handler)

定义了一个添加处理程序的函数,而

on_click() do event
    println("Mouse clicked at $event")
end

on_click() do event
    println("Beep.")
end

两次调用这个新定义的函数。do符号隐藏了一点,但基本上这转化为:

push!(handlers, event -> println("Mouse clicked at $event"))
push!(handlers, event -> println("Beep."))

click()被调用时,所提供的元素例如(x=50, y=29)被传递给使用该foreach构造的所有处理程序。


推荐阅读