"Meikel Brandmeyer (kotarak)" <[email protected]> writes:
> you are right. require-owl also works as a function:
>
> (defn require-owl
> [file & {nspace :namespace :or {nspace *ns*}}]
> (with-open [rdr (io/reader file)]
> (doseq [entry (owl-seq rdr)
> :let [entry-name (translate-name (:name entry))]]
> (intern nspace entry-name (:init entry))
> (alter-meta! (ns-resolve nspace entry-name) assoc :owl true))
>
> This should work as before. I think the important part for your question is
> actually the ns-resolve to fix the tests.
Nope that fails as well. intern already returns the var, so there is no
point looking it up with ns-resolve And because you've used intern, this
will still fail in the original case I was complaining about...
(do (require-owl "bob.owl")
bob)
(where bob is defined by the require-owl) unless the `do` is a
top-level.
(do (require-owl "bob.owl")
(var-get (ns-resolve 'bob 'bob)))
would work.
See, it's counter-intuitive isn't it? I've tried this backwards and
forwards now. intern is much better when you don't know the symbol at
compile-time because the first parameter evals, unlike def, but then you
get these random compilation failures.
AFAICT, this is an inevitable outcome of Clojure's non-interning
compiler. At least, I think that the documentation of intern, do and
defn needs to be updated, even if it is an edge-case.
Phil
--
--
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.