Here is my very basic implementation #= A very basic signal / slot library
Usage: function myslot01(args...; kwargs...) println("myslot01 with $args and $kwargs") end function myslot02(args...; kwargs...) println("myslot02 with $args and $kwargs") end function myslot03(a,b; x=-1, y=-1) println("myslot03 with a=$a b=$b x=$x y=$y") end stop_modified = Signal() connect(stop_modified, myslot01) connect(stop_modified, myslot02) connect(stop_modified, myslot03) emit(stop_modified, 1, 2, x=1, y=2) connected = is_connected(stop_modified, myslot01) println("is_connected(stop_modified, myslot01): $connected") disconnect(stop_modified, myslot01) connected = is_connected(stop_modified, myslot01) println("is_connected(stop_modified, myslot01): $connected") emit(stop_modified, "a", "b") =# using DataStructures typealias Slot Function #= ToDo: it will be possible to do this when Julia will accept anonymous function with keyword arguments (v>=0.5) type Slot f::Function end call(slot::Slot, args...; kwargs...) = slot.f(args...; kwargs...) myslot01 = Slot((args...; kwargs...) -> begin println("myslot01 with $args and $kwargs") end) =# type Signal slots::OrderedDict{Symbol,Slot} Signal() = new(OrderedDict()) end function emit(signal::Signal, args...; kwargs...) for (symb, slot) in signal.slots slot(args...; kwargs...) end end function connect(signal::Signal, slot::Slot) key = symbol(slot) if !haskey(signal.slots, key) signal.slots[key] = slot else error("slot $slot ever connected to $signal") end end function is_connected(signal::Signal, slot::Slot) symbol(slot) in keys(signal.slots) end function disconnect(signal::Signal, slot::Slot) delete!(signal.slots, symbol(slot)) end Le mardi 31 mai 2016 02:17:54 UTC+2, Steven G. Johnson a écrit : > > Reactive.jl?