Hello, I forgot a parenthesis :-P (defrecord MyComputeComponent [factor mydatacomp] component/Lifecycle (start [this] (println "Starting MyComputeComponent") this) (stop [this] (println "Stopping MyComputeComponent") (dissoc this :mydatacomp)))
El miércoles, 18 de enero de 2017, 10:56:37 (UTC-6), Jose Figueroa Martinez escribió: > > Hello, your code is acting ok, as you are not dissocing the data component > from the compute component during its "stop" method . > > Remember, this is not object oriented programming. You removed the data > from the data component, but did nothing to the compute component. That is > the reason why the compute component still have a "copy" of the data > component with the old data. > > If you want the "correct" behavior (depends of what you want) then your > compute component should look like this: > > (defrecord MyComputeComponent [factor mydatacomp] > component/Lifecycle > (start [this] > (println "Starting MyComputeComponent") > this) > (stop [this] > (println "Stopping MyComputeComponent") > (dissoc this :mydatacomp)) ;; or (assoc this :mydatacomp nil)) > > > Saludos! > > > > El miércoles, 18 de enero de 2017, 8:28:24 (UTC-6), Jochen escribió: >> >> Hi… >> >> playing around with Stuart Sierras component library I found some >> behavior (code at end) that I find odd. >> M sample has just two components, data and compute, where data is >> injected into compute. On start data associates a data map and on stop >> dissociates it. >> compute uses a value from data's map to compute. >> >> What I found is that after system stop the started version of data is >> still associated to compute, while the data component in SystemMap is >> stopped. So, when do >> >> (def my-system (make-my-system {:factor 2})) >> (alter-var-root #'my-system component/start-system) >> (alter-var-root #'my-system component/stop-system) >> (my-compute (:mycomputecomp my-system) 16) >> >> my-compute should (as data map is nil'ed on stop) crash but doesn't. >> >> Calling >> >> (alter-var-root #'my-system component/stop-system) >> >> again fixes it and my-compute crashes as expected. >> >> Any ideas? >> >> Ciao >> >> …Jochen >> >> (ns foo.core >> (:require [com.stuartsierra.component :as component])) >> >> (defrecord MyDataComponent [data] >> component/Lifecycle >> (start [this] >> (println "Starting MyDataComponent") >> (assoc this :data {:foo 42})) >> (stop [this] >> (println "Stopping MyDataComponent") >> (dissoc this :data))) >> >> (defn my-data-component [] >> (->MyDataComponent nil)) >> >> (defn mydatacomp-foo [mydatacomp] >> (get-in mydatacomp [:data :foo])) >> >> >> (defrecord MyComputeComponent [factor mydatacomp] >> component/Lifecycle >> (start [this] >> (println "Starting MyComputeComponent") >> this) >> (stop [this] >> (println "Stopping MyComputeComponent") >> this)) >> >> (defn my-compute-component [factor] >> (map->MyComputeComponent {:factor factor})) >> >> (defn my-compute [mycomputecomp offset] >> (let [factor (:factor mycomputecomp) >> foo (mydatacomp-foo (:mydatacomp mycomputecomp))] >> (+ (* factor foo) offset))) >> >> (defn make-my-system [config-options] >> (let [{:keys [factor]} config-options] >> (component/system-map >> :mydatacomp (my-data-component) >> :mycomputecomp (component/using >> (my-compute-component factor) >> [:mydatacomp])))) >> >> >> ;;;;;; running >> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; >> (comment >> (def my-system (make-my-system {:factor 2})) >> (alter-var-root #'my-system component/start-system) >> (alter-var-root #'my-system component/stop-system) >> (my-compute (:mycomputecomp my-system) 16) >> ) >> >> -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.