James, that works but i would use a record instead of something like that. I want to extract the local bindings only with a var to the closure. I thought there might be some meta data or properties i can access.
Josh, I didn't think about using java reflection api. thanks! On Saturday, May 26, 2018 at 9:23:05 AM UTC+3, James Gatannah wrote: > > > > On Friday, May 25, 2018 at 7:40:12 AM UTC-5, Sonny To wrote: >> >> Hi James, >> I'm trying to access the local bindings of the closure like it is an >> object >> (.-x bar) should give 1. I can use a defrecord for this but I want to >> use regular functions and no macro magic >> > > This isn't quite what you're asking for, but one approach to what records > actually do would be to return a map of closures that include accessors for > the state. (Disclaimer: I'm totally doing this off the top of my head in > the google groups web interface, without even checking that the parentheses > are balanced) One example would be: > > (defn build-incrementer > > [x] > > {:inc (fn [] (inc x)) > :dec (fn [] (dec x)) > :status (fn [] x)}) > > Is that close to what you wanted? > > Regards, > James > > >> >> On Friday, May 25, 2018 at 9:01:22 AM UTC+3, James Gatannah wrote: >> >>> On Thursday, May 24, 2018 at 1:22:42 PM UTC-5, Sonny To wrote: >>>> >>>> (defn foo[] >>>> (let [x 1] >>>> (fn [] >>>> (+ x 1) >>>> ) >>>> ) >>>> >>>> (def bar (foo)) >>>> >>>> Is there a way to get the value of x from closure bar? >>>> >>> >>> I may be describing this incorrectly. >>> >>> You're creating a top-level var named bar. >>> >>> You're calling the function foo, and associating the value it returns to >>> that var bar. >>> >>> foo's return value happens to be a function that looks like it should be >>> a counter. Except that, in clojure, it isn't. >>> >>> This vaguely looks like an approach to lexical closures that I vaguely >>> remember from scheme textbooks (and Paul Graham essays). >>> >>> What are you really trying to do? >>> >> -- 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.