On Mon, Jul 27, 2009 at 5:09 PM, Phil Hagelberg<[email protected]> wrote:
[snip]
> What exactly are you trying?
The following steps should show the "problem" I'm having:
1. Create a file, foo.clj, containing
(ns foo)
(def qux 5)
(defn bar [x]
(* x qux))
2. Start Slime.
3. Back in foo.clj, C-c C-k to compile and load the file into slime.
4. In the slime-repl I can see that foo/bar is defined:
; SLIME 2009-07-06
user> foo/bar
#<foo$bar__1293 foo$bar__1...@442fb9e4>
5. I can set the foo namespace from the repl by typing ",i foo":
user>
foo> (bar 5)
25
6. Now switch back to foo.clj and change the definition of bar in some
uninteresting way, e.g.,
(defn bar [x]
(* x x qux))
7. Now evaluate that definition, C-c C-c
8. Fail: you get an error
Unable to resolve symbol: qux in this context
[Thrown class java.lang.Exception]
Restarts:
0: [ABORT] Return to SLIME's top level.
Backtrace:
0: clojure.lang.Compiler.resolveIn(Compiler.java:4682)
1: clojure.lang.Compiler.resolve(Compiler.java:4628)
2: clojure.lang.Compiler.analyzeSymbol(Compiler.java:4605)
3: clojure.lang.Compiler.analyze(Compiler.java:4307)
4: clojure.lang.Compiler.analyze(Compiler.java:4286)
5: clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:2771)
6: clojure.lang.Compiler.analyzeSeq(Compiler.java:4498)
7: clojure.lang.Compiler.analyze(Compiler.java:4325)
8: clojure.lang.Compiler.analyze(Compiler.java:4286)
9: clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:3862)
10: clojure.lang.Compiler$FnMethod.parse(Compiler.java:3697)
11: clojure.lang.Compiler$FnMethod.access$1100(Compiler.java:3574)
12: clojure.lang.Compiler$FnExpr.parse(Compiler.java:2963)
13: clojure.lang.Compiler.analyzeSeq(Compiler.java:4494)
14: clojure.lang.Compiler.analyze(Compiler.java:4325)
15: clojure.lang.Compiler.analyzeSeq(Compiler.java:4484)
16: clojure.lang.Compiler.analyze(Compiler.java:4325)
17: clojure.lang.Compiler.access$100(Compiler.java:35)
18: clojure.lang.Compiler$DefExpr$Parser.parse(Compiler.java:369)
19: clojure.lang.Compiler.analyzeSeq(Compiler.java:4496)
20: clojure.lang.Compiler.analyze(Compiler.java:4325)
21: clojure.lang.Compiler.analyzeSeq(Compiler.java:4484)
22: clojure.lang.Compiler.analyze(Compiler.java:4325)
23: clojure.lang.Compiler.analyze(Compiler.java:4286)
24: clojure.lang.Compiler.eval(Compiler.java:4536)
25: clojure.core$eval__3990.invoke(core.clj:1728)
--more--
Note that the repl was set to the namespace containing qux! Indeed, if
you abort the evaluation:
foo> qux
5
It seems that the environment the per-definition compilation takes
place in doesn't match that of the underlying repl, or something. I
don't know. I'm just confused by it.
Does this make more sense now?
-tree
--
Tom Emerson
[email protected]
http://treerex.blogspot.com/
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---