Re: Dependency between files problem
To both of you: this is just to say thank you for taking the time to explain and advise in such detail. Really appreciated! -- 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
Dependency between files problem
File example\some.clj (ns example.some (:use example.someother)) (defn helloworld [] (print helloworld)) File example\someother.clj: (ns example.someother (:use example.some)) (defn sample [] (helloworld)) A compile error Unable to resolve helloworld in this context is produced (on either latest clojure-maven-plugin or Leiningen). If the two defn's are switched places, the build completes successfully. This is very basic functionality but after thinking a lot, I still see no reason why it isn't working. What am I getting wrong? Clojure 1.2. -- 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
Re: Dependency between files problem
On Mon, Nov 15, 2010 at 11:35 AM, trying clj trying...@gmail.com wrote: A compile error Unable to resolve helloworld in this context is produced (on either latest clojure-maven-plugin or Leiningen). If the two defn's are switched places, the build completes successfully. This is very basic functionality but after thinking a lot, I still see no reason why it isn't working. What am I getting wrong? Circular dependencies are not allowed. The problem is that the compiler gives you an unhelpful message. This issue is actually as old as the hills (pre-1.0), though there has been a patch submitted recently that fixes it: http://dev.clojure.org/jira/browse/CLJ-8 Just waiting for that to get applied. -Phil -- 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
Re: Dependency between files problem
On Mon, Nov 15, 2010 at 2:35 PM, trying clj trying...@gmail.com wrote: File example\some.clj (ns example.some (:use example.someother)) (defn helloworld [] (print helloworld)) File example\someother.clj: (ns example.someother (:use example.some)) (defn sample [] (helloworld)) A compile error Unable to resolve helloworld in this context is produced (on either latest clojure-maven-plugin or Leiningen). If the two defn's are switched places, the build completes successfully. This is very basic functionality but after thinking a lot, I still see no reason why it isn't working. What am I getting wrong? Probably in one case it was compiling the file with sample before the file with helloworld. Be glad this example doesn't have a true circular dependency. I have sometimes resorted to atom to get rid of circular dependencies: file1.clj: (defvar- foo (atom nil)) (defn some-fn [...] ... (do-something-with @foo) ...) (defn set-foo! [x] (reset! foo x)) file2.clj: (defn some-other-fn [...] ... (some-fn some-args) ...) (defn init-file2 [] (set-foo! [some-data-structure-built-using-some-other-fn])) filen.clj: (defn main- [...] (init-file2) ...) Obviously in this example some-fn ought to have some way to be somewhat useful if the atom's still its initial value, here nil. A case that comes up sometimes is a lookup table, in which case starting it with an empty map {} makes sense. The most recent case where I did something like this, foo was a large data structure that had to hold functions that called functions that called functions that, eventually, referenced the data structure. None of these functions would actually get *called* until bootstrap was complete, so they'd never see the atom holding nil, but fn1 calls fn2 calls fn3 calls fn4 references foo contains fn1 is still a circular dependency. -- 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