Hey Jason,
You were exactly right (which is pretty impressive, being that you've never
seen my code). In my (s/defn ..) form, there was an error that was failing
silently.
(s/defn [one two]
...
*#_(def params (atom '({}) ))*
(def params '({}))
(try (eval `(~afn ~@params)) (catch Exception e (println "Exception: "
(.getMessage e)))))
So the abouve code works. But if I instead use the commented version, I'll
get an exception. It seems there's a problem passing in a form containing
an atom to be dynamically eval'd. The error is mentioned on these posts (
here <http://clojure-log.n01se.net/date/2009-03-02.html> and
here<http://www.raynes.me/logs/irc.freenode.net/clojure/2012-09-17.txt#>).
Is there a way to pass in a form containing an atom to be dynamically
eval'd? It's pretty important to my architecture, that all functions treat
that system-atom the same. Any insights are welcome.
*"java.lang.RuntimeException: Can't embed object in code, maybe print-dup
not defined: clojure.lang.Atom@1c99db7 (NO_SOURCE_FILE:0)"*
Thanks
Tim Washington
Interruptsoftware.com <http://interruptsoftware.com>
On Fri, Jan 3, 2014 at 2:39 PM, Jason Wolfe <[email protected]> wrote:
> Thanks for the report.
>
> Schema fns inside of go blocks seem to work fine for me. It seems likely
> that you're seeing an exception inside the go block, which is swallowed by
> default:
>
> user> (clojure.core.async/go (println "A"))
> #<ManyToManyChannel
> clojure.core.async.impl.channels.ManyToManyChannel@46ae10a6>
> A
>
> user> (clojure.core.async/go (throw (RuntimeException.)) (println "A"))
> #<ManyToManyChannel
> clojure.core.async.impl.channels.ManyToManyChannel@427c78c1>
>
> Would you mind wrapping the body of your go block in a try/catch and
> printing the exception stack trace, or posting a gist that demonstrates the
> issue so I can look into it further?
>
> Thanks!
>
>
> On Friday, January 3, 2014 10:21:16 AM UTC-8, frye wrote:
>
>> Forwarding...
>>
>> ---------- Forwarded message ----------
>> From: Timothy Washington <[email protected]>
>> Date: Fri, Jan 3, 2014 at 1:17 PM
>> Subject: Re: Core.async, Rules for passing clojure vals to go block
>> To: Shaun Gilchrist <[email protected]>
>>
>>
>> I'm using Prismatic's Schema in my code base. Now, it looks like defining
>> some functions with
>> s/defn<https://github.com/Prismatic/schema/blob/master/src/clj/schema/macros.clj#L453>,
>> yields some wonky behaviour. Particularly, not running, when being invoked
>> in a go block. It just fails silently, which is why it was so hard to track
>> down. Don't yet know why this is happening. But an fyi for the devs and
>> users of this package. Still love schema, I just need to figure out where
>> the call chain breaks down.
>>
>>
>> Hth
>>
>> Tim Washington
>> Interruptsoftware.com <http://interruptsoftware.com>
>>
>>
>> On Fri, Jan 3, 2014 at 9:58 AM, Timothy Washington <[email protected]>wrote:
>>
>>> Hey Shaun,
>>>
>>> Thanks for looking into this. Your example does indeed work. I'll have
>>> to teardown my own code and see where the invocations are failing. At least
>>> I know it's not core.async.
>>>
>>>
>>> Cheers
>>>
>>> Tim Washington
>>> Interruptsoftware.com <http://interruptsoftware.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
---
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.