Hi, On May 31, 1:46 pm, "Sina K. Heshmati" <s...@khakbaz.com> wrote:
> Here's my concern: > > - My program (A) is running. > - B is running on the same VM. > - B accesses the state of A. > - B alters the state of A in an inconsistent way > e.g. whenever the internal state x changes, the > internal state y also has to change accordingly, > but B only changes x. > - A is screwed. A is namespace my.ns.a. There you define a private var: (def ^{:private true} state (atom 0)). B is namespace my.ns.b. B cannot change state in A. user=> (ns my.ns.a) nil my.ns.a=> (def ^{:private true} state (atom 0)) #'my.ns.a/state my.ns.a=> (ns my.ns.b) nil my.ns.b=> (reset! my.ns.a/state :messed-up-your-state-harharhar) java.lang.IllegalStateException: var: my.ns.a/state is not public (NO_SOURCE_FILE:4) >From a philosophical point of view: Either you develop an application and you are in charge of B. => You are in control: don't do it. you are not in charge of B. => B is obviously a crappy library which you should not use in project. You develop a library: A. Why bother? Since your library is well documented it clearly defines the contract. Why care for people who are too lazy to read? > Is there a way to pass the function itself rather > than making a new function that calls the exact > same function with the same arguments? (let [state (atom 0)] (extend t-a prot-a {:op-a (fn [this x y] (+ (.member this) x y @state))})) Sincerely Meikel -- 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