>From yesterday:

(defmacro eval-in
  "Eval a Clojure form in a different namespace and switch back to current
namespace.

   Args:
   code - Clojure form as string
   ns - Target namespace as string"
  [code ns]
  `(do
     (in-ns '~(symbol ns))
     (let [ret# (eval '~(read-string code))]
       (in-ns '~(ns-name *ns*))
       ret#)))



user=> (def generator "(X 400 400)")
#'user/generator
user=> (def image (eval-in generator "clevolution.version.version0-1-1"))
CompilerException java.lang.ClassCastException: clojure.lang.Symbol cannot
be cast to java.lang.String, compiling:(NO_SOURCE_PATH:1)

user=> (def image (eval-in "(X 400 400)"
"clevolution.version.version0-1-1"))
#'user/image

So it's OK to pass the explicit string but not the symbol. What am I not
getting here?

-A


On Tue, Dec 18, 2012 at 12:48 AM, Alan Shaw <noden...@gmail.com> wrote:

> Now I do, and the macro worked!
> I believe I have a problem using the macro from a function, but leaving
> that for tomorrow.
>
> Thanks BG!
>
> -A
>
>
>
> On Tue, Dec 18, 2012 at 12:19 AM, Baishampayan Ghose <b.gh...@gmail.com>wrote:
>
>> Do you have target ns "clevolution.version.version0-1-1" required?
>>
>> -BG
>>
>> On Tue, Dec 18, 2012 at 1:38 PM, Alan Shaw <noden...@gmail.com> wrote:
>> > BG,
>> > The macro doesn't seem to do the trick. The function X is interned in
>> the
>> > target namespace, but:
>> >
>> > user=> (def image (eval-in "(X 400 400)"
>> > "clevolution.version.version0-1-1"))
>> > CompilerException java.lang.RuntimeException: Unable to resolve symbol:
>> X in
>> > this context, compiling:(NO_SOURCE_PATH:1)
>> >
>> >
>> > On Mon, Dec 17, 2012 at 11:53 PM, Alan Shaw <noden...@gmail.com> wrote:
>> >>
>> >> Oh yes, the something.something is fixed so I can just prepend it,
>> thanks.
>> >> (Hadn't noticed your macro takes the ns as a string!)
>> >>
>> >> -A
>> >>
>> >>
>> >>
>> >> On Mon, Dec 17, 2012 at 11:47 PM, Baishampayan Ghose <
>> b.gh...@gmail.com>
>> >> wrote:
>> >>>
>> >>> Alan,
>> >>>
>> >>> What you're asking for is to derive the ns "clojure.core" given only
>> >>> "core". Not sure if that's possible.
>> >>>
>> >>> The namespace constitutes the whole dotted structure and not just the
>> >>> last component, I am afraid.
>> >>>
>> >>> If the actual ns is something.something.version-0-1-1, then you need
>> >>> the string "something.something.version-0-1-1" and not just
>> >>> "version-0-1-1" [unless of course you have some other way of deriving
>> >>> it from info that's embedded in _your_ code or structure thereof].
>> >>>
>> >>>
>> >>> -BG
>> >>>
>> >>> On Tue, Dec 18, 2012 at 1:10 PM, Alan Shaw <noden...@gmail.com>
>> wrote:
>> >>> > Thanks BG, I'm trying that.
>> >>> > But I don't think it addresses how to get from the string
>> >>> > "version-0-1-1" to
>> >>> > the namespace something.something.version-0-1-1. How can I do that?
>> >>> >
>> >>> > -A
>> >>> >
>> >>> >
>> >>> >
>> >>> > On Mon, Dec 17, 2012 at 11:26 PM, Baishampayan Ghose
>> >>> > <b.gh...@gmail.com>
>> >>> > wrote:
>> >>> >>
>> >>> >> Alan,
>> >>> >>
>> >>> >> Something like this might work for you -
>> >>> >>
>> >>> >> (defmacro eval-in
>> >>> >>   "Eval a Clojure form in a different namespace and switch back to
>> >>> >> current namespace.
>> >>> >>
>> >>> >>    Args:
>> >>> >>    code - Clojure form as string
>> >>> >>    ns - Target namespace as string"
>> >>> >>   [code ns]
>> >>> >>   `(do
>> >>> >>      (in-ns '~(symbol ns))
>> >>> >>      (let [ret# (eval '~(read-string code))]
>> >>> >>        (in-ns '~(ns-name *ns*))
>> >>> >>        ret#)))
>> >>> >>
>> >>> >> Warning - I haven't really tested this code.
>> >>> >>
>> >>> >> -BG
>> >>> >>
>> >>> >> On Tue, Dec 18, 2012 at 12:37 PM, Alan Shaw <noden...@gmail.com>
>> >>> >> wrote:
>> >>> >> > Thanks, Las!
>> >>> >> >
>> >>> >> > Ok say I have a file in which there is string such as
>> >>> >> >
>> >>> >> > "(- (atan (bw-noise 902 2 0.7604615575402431 400 400))
>> >>> >> > (read-image-from-file
>> >>> >> > \"images/Dawn_on_Callipygea.png\"))"
>> >>> >> >
>> >>> >> > and another
>> >>> >> >
>> >>> >> > "version-0-0-1"
>> >>> >> >
>> >>> >> > and I have a namespace version-0-0-1 into which functions named
>> atan
>> >>> >> > etc.
>> >>> >> > are all :referred.  I want to evaluate the expression in that
>> >>> >> > particular
>> >>> >> > context, and not remain there when I'm done.
>> >>> >> >
>> >>> >> > -A
>> >>> >> >
>> >>> >> >
>> >>> >> >
>> >>> >> > On Mon, Dec 17, 2012 at 11:00 PM, László Török <
>> ltoro...@gmail.com>
>> >>> >> > wrote:
>> >>> >> >>
>> >>> >> >> ah, sorry, it's a bit early for me
>> >>> >> >>
>> >>> >> >> (in-ns (ns-name user-ns))
>> >>> >> >>
>> >>> >> >> if you could post a simple example for the second part of your
>> >>> >> >> question
>> >>> >> >> I
>> >>> >> >> maybe able to help.
>> >>> >> >>
>> >>> >> >> Las
>> >>> >> >>
>> >>> >> >> Alan Shaw 2012. december 18., kedd napon a következőt írta:
>> >>> >> >>
>> >>> >> >>> Ah no, that puts me in a new user-ns namespace! Not what I
>> wanted!
>> >>> >> >>>
>> >>> >> >>>
>> >>> >> >>> On Mon, Dec 17, 2012 at 10:51 PM, László Török
>> >>> >> >>> <ltoro...@gmail.com>
>> >>> >> >>> wrote:
>> >>> >> >>>>
>> >>> >> >>>> Try (in-ns 'user-ns)
>> >>> >> >>>>
>> >>> >> >>>> Las
>> >>> >> >>>>
>> >>> >> >>>> On Dec 18, 2012 7:50 AM, "Alan Shaw" <noden...@gmail.com>
>> wrote:
>> >>> >> >>>>>
>> >>> >> >>>>> user=> *ns*
>> >>> >> >>>>> #<Namespace user>
>> >>> >> >>>>> user=> (def user-ns *ns*)
>> >>> >> >>>>> #'user/user-ns
>> >>> >> >>>>> user=> user-ns
>> >>> >> >>>>> #<Namespace user>
>> >>> >> >>>>> user=> (in-ns user-ns)
>> >>> >> >>>>> ClassCastException clojure.lang.Namespace cannot be cast to
>> >>> >> >>>>> clojure.lang.Symbol  clojure.lang.RT$1.invoke (RT.java:226)
>> >>> >> >>>>>
>> >>> >> >>>>> It appears I'm not understanding how namespaces are
>> represented.
>> >>> >> >>>>>
>> >>> >> >>>>> Also, is it just wrong of me to want to remember a namespace
>> I
>> >>> >> >>>>> was
>> >>> >> >>>>> working in and try to go back to it later?
>> >>> >> >>>>>
>> >>> >> >>>>> The slightly larger context is: I'm saving an s-expression
>> with
>> >>> >> >>>>> unqualified names in it into a file as a string. Also saving
>> a
>> >>> >> >>>>> string
>> >>> >> >>>>> indicating the name of the environment in which that string
>> >>> >> >>>>> should
>> >>> >> >>>>> be (read
>> >>> >> >>>>> and) eval'ed so that the names will resolve to the
>> appropriate
>> >>> >> >>>>> functions.
>> >>> >> >>>>> Advice on managing this would be appreciated.
>> >>> >> >>>>>
>> >>> >> >>>>> -Alan Shaw
>> >>> >> >>>>>
>> >>> >> >>>>> --
>> >>> >> >>>>> 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
>> >>> >> >>>>
>> >>> >> >>>> --
>> >>> >> >>>> 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
>> >>> >> >>>
>> >>> >> >>>
>> >>> >> >>> --
>> >>> >> >>> 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
>> >>> >> >>
>> >>> >> >>
>> >>> >> >>
>> >>> >> >> --
>> >>> >> >> László Török
>> >>> >> >>
>> >>> >> >> --
>> >>> >> >> 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
>> >>> >> >
>> >>> >> >
>> >>> >> > --
>> >>> >> > 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
>> >>> >>
>> >>> >>
>> >>> >>
>> >>> >> --
>> >>> >> Baishampayan Ghose
>> >>> >> b.ghose at gmail.com
>> >>> >>
>> >>> >> --
>> >>> >> 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
>> >>> >
>> >>> >
>> >>> > --
>> >>> > 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
>> >>>
>> >>>
>> >>>
>> >>> --
>> >>> Baishampayan Ghose
>> >>> b.ghose at gmail.com
>> >>>
>> >>> --
>> >>> 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
>> >>
>> >>
>> >
>> > --
>> > 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
>>
>>
>>
>> --
>> Baishampayan Ghose
>> b.ghose at gmail.com
>>
>> --
>> 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
>>
>
>

-- 
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

Reply via email to