Additionally, we can make the chain into a loop. (defn f1 [] 42) (def f2 #'f1) (def f3 #'f2) (def f1 #'f3)
(f3) ==> stack overflow On Sunday, 26 May 2013 18:18:57 UTC-4, JvJ wrote: > > Actually, I spoke WAY too soon. > > It looks like it has to do with the way that Var is cast to IFn. > > > https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Var.java > > Check out lines 391 and 410. When invoked, the result of fn() is invoked. > fn() casts deref() (the data contained by the var) into a function. > > If the var contains another var, casting that var to an IFn will result in > a recursive call. > > For example: > > f3 casts f2 to an IFn. > f2 casts f1 to an IFn. > f1 casts the function to an IFn (resulting in the function). > > So the "chaining together" is defined in the invoke method and the casting > process. > > On Sunday, 26 May 2013 17:33:24 UTC-4, Simon Katz wrote: >> >> If I define a chain of vars like this... >> >> (defn f1 [] 42) >> >> (def f2 #'f1) >> >> (def f3 #'f2) >> >> ...when I call f3 the chain of vars is followed: >> >> (f3) ; => 42 >> >> Out of curiosity, where is this following-the-chain defined? >> >> I looked at http://clojure.org/evaluation which simply says "The result >> of the evaluation of the operator is [...] cast to IFn (the interface >> representing Clojure functions), and invoke() is called on it". >> >> --Simon >> > -- -- 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/groups/opt_out.