Re: Dependency between files problem

2010-11-18 Thread tryingclj
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

2010-11-15 Thread trying clj
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

2010-11-15 Thread Phil Hagelberg
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

2010-11-15 Thread Ken Wesson
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