Hi Ramesh,
Based on the stack-trace, the error is thrown during compile-time. This
means the compiler is having a hard time compiling test1/core.clj because
it doesn't know of any hello namespace. This makes sense since no hello
namespace has
been referred to in the test1.core namespace (i.e. the file being
compiled). Note that the call to ns-publics works because you are actually
using the quoted symbol hello which the compiler doesn't have to resolve.
In order to get the value of the vars in hello at runtime (after loading
the file) you can use the resolve or the intern functions, which return the
var (not the value) from the given namespace, so you have to dereference it:
(println (-> 'hello/someconst resolve deref))
Also, if the hello.clj file is in the src dir, you should run:
lein run src/hello.clj
Which show this output:
#<Namespace hello>
{-main #'test1.core/-main}
{someconst #'hello/someconst}
#<hello$someconst hello$someconst@cdc69b>
HTH,
Juan
On Sunday, October 20, 2013 11:49:27 AM UTC+8, Ramesh Thulasiram wrote:
>
> Hi All,
>
> I'm calling load-file to load a user-specified file inside -main. And, the
> loaded file has its own namespace, and I'm able to see that using
> (ns-publics) as well. However, when I try to call a function inside the
> loaded file, from -main, I'm getting a "no such namespace" exception.
>
> ;; Lein project test1;File : src/test1/core.clj(ns test1.core
> (:gen-class))(defn -main [ & args] (load-file (first args)) (println
> (ns-publics 'test1.core)) (println (ns-publics 'hello)) (println
> (hello/someconst))) ;File : hello.clj(ns hello)(println *ns*)(defn someconst
> [] 25); run as : ; lein run hello.clj(comment error Exception in thread
> "main" java.lang.RuntimeException: No such namespace: hello,
> compiling:(test1/core.clj:9:12) at
> clojure.lang.Compiler.analyze(Compiler.java:6380) at
> clojure.lang.Compiler.analyze(Compiler.java:6322) at
> clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3573) at
> clojure.lang.Compiler.analyzeSeq(Compiler.java:6562) at
> clojure.lang.Compiler.analyze(Compiler.java:6361) at
> clojure.lang.Compiler.analyze(Compiler.java:6322) at
> clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3624) at
> clojure.lang.Compiler.analyzeSeq(Compiler.java:6562) at
> clojure.lang.Compiler.analyze(Compiler.java:6361) at
> clojure.lang.Compiler.analyze(Compiler.java:6322) at
> clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:5708) at
> clojure.lang.Compiler$FnMethod.parse(Compiler.java:5139) at
> clojure.lang.Compiler$FnExpr.parse(Compiler.java:3751) at
> clojure.lang.Compiler.analyzeSeq(Compiler.java:6558) at
> clojure.lang.Compiler.analyze(Compiler.java:6361) at
> clojure.lang.Compiler.analyzeSeq(Compiler.java:6548) at
> clojure.lang.Compiler.analyze(Compiler.java:6361) at
> clojure.lang.Compiler.access$100(Compiler.java:37) at
> clojure.lang.Compiler$DefExpr$Parser.parse(Compiler.java:529) at
> clojure.lang.Compiler.analyzeSeq(Compiler.java:6560) at
> clojure.lang.Compiler.analyze(Compiler.java:6361) at
> clojure.lang.Compiler.analyze(Compiler.java:6322) at
> clojure.lang.Compiler.eval(Compiler.java:6623) at
> clojure.lang.Compiler.load(Compiler.java:7064) at
> clojure.lang.RT.loadResourceScript(RT.java:370) at
> clojure.lang.RT.loadResourceScript(RT.java:361) at
> clojure.lang.RT.load(RT.java:440) at clojure.lang.RT.load(RT.java:411)
> at clojure.core$load$fn__5018.invoke(core.clj:5530) at
> clojure.core$load.doInvoke(core.clj:5529) at
> clojure.lang.RestFn.invoke(RestFn.java:408) at
> clojure.core$load_one.invoke(core.clj:5336) at
> clojure.core$load_lib$fn__4967.invoke(core.clj:5375) at
> clojure.core$load_lib.doInvoke(core.clj:5374) at
> clojure.lang.RestFn.applyTo(RestFn.java:142) at
> clojure.core$apply.invoke(core.clj:619) at
> clojure.core$load_libs.doInvoke(core.clj:5413) at
> clojure.lang.RestFn.applyTo(RestFn.java:137) at
> clojure.core$apply.invoke(core.clj:619) at
> clojure.core$require.doInvoke(core.clj:5496) at
> clojure.lang.RestFn.invoke(RestFn.java:408) at
> user$eval3.invoke(NO_SOURCE_FILE:1) at
> clojure.lang.Compiler.eval(Compiler.java:6619) at
> clojure.lang.Compiler.eval(Compiler.java:6608) at
> clojure.lang.Compiler.eval(Compiler.java:6582) at
> clojure.core$eval.invoke(core.clj:2852) at
> clojure.main$eval_opt.invoke(main.clj:308) at
> clojure.main$initialize.invoke(main.clj:327) at
> clojure.main$null_opt.invoke(main.clj:362) at
> clojure.main$main.doInvoke(main.clj:440) at
> clojure.lang.RestFn.invoke(RestFn.java:421) at
> clojure.lang.Var.invoke(Var.java:419) at
> clojure.lang.AFn.applyToHelper(AFn.java:163) at
> clojure.lang.Var.applyTo(Var.java:532) at
> clojure.main.main(main.java:37)Caused by: java.lang.RuntimeException: No such
> namespace: hello at clojure.lang.Util.runtimeException(Util.java:219)
> at clojure.lang.Compiler.resolveIn(Compiler.java:6844) at
> clojure.lang.Compiler.resolve(Compiler.java:6818) at
> clojure.lang.Compiler.analyzeSymbol(Compiler.java:6779) at
> clojure.lang.Compiler.analyze(Compiler.java:6343) ... 54 more)
>
>
>
>
> -ramesh
>
--
--
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
---
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 [email protected].
For more options, visit https://groups.google.com/groups/opt_out.