2010/8/5 Laurent PETIT <laurent.pe...@gmail.com> > > > 2010/8/5 Meikel Brandmeyer <m...@kotka.de> > >> Hi, >> >> >> On Aug 5, 2:14 pm, Laurent PETIT <laurent.pe...@gmail.com> wrote: >> >> > (ns delay.util) >> > >> > (defprotocol Cancellable (isCancelled [this]) (cancel [this])) >> > >> > (defn timed-delay [pause fun] >> > (let [d (delay (fun)) >> > f (future (Thread/sleep pause) @d)] >> > (reify >> > clojure.lang.IDeref >> > (deref [_] @d) >> > delay.util.Cancellable >> > (isCancelled [_] (future-cancelled? f)) >> > (cancel [_] (future-cancel f))))) >> > >> > What about this ? >> >> This looks ok, I think. At least better than "hijacking" the future. >> >> However, I'm still the opinion, that you mix up concerns here. >> "Cancellable" somehow implies that it stops whatever the thing is >> doing. But it has no influence on the deref. To me this would be >> surprising. >> >> For me the whole future thing is a side-effect which is not relevant >> to the consumer of the parsed code. It is a convenience which can be >> tracked separately from the actual delay. >> > > Yes, maybe I'm putting too much ... will need to think about it again > > But I don't understand your usage of the expression "side-effect". e.g. the > instance given will play well in any situation. Even if you call cancel on > it, this will not prevent following calls to deref to succeed. So holders of > a reference to it can use it without knowing at all that the instance also > implements the Cancellable interface. Maybe it's the names that must be > adjusted. > > After all I was wrong, it's not a delayed delay I've written. >
Or is it ? I'm getting self-confused this afternoon :-) -- 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