yes, your code works if you don't use the "^:const", but why doesn't it
work with ^:const when you just use the return of mapv (something with
reify?)? It's either some clojure bug or missing feature, or something
inherent that I don't understand(ie. maybe it doesn't make sense to def
^:const the return of (mapv #(apply vector-of :int %) - I don't know really
since I'm a clojure noob)
 I'm really hoping for someone who actually knows to tell us what's going
on and they can use that above to reproduce it in repl, ie. this:
(def ^:const
mappings-8x8
  (mapv #(apply vector-of :int %)
        [[0 0] [1 0] [2 0]])
  )

(class mappings-8x8) ;throws
;or replace class with whatever ie. print or ifn? etc.

Can you actually cast mappings-8x8 to clojure.lang.PersistentVector ? I
noticed that you used type hints. The actual class to be casted to it would
be this: clojure.core$reify__6186
I'm actually unable to tell what's the class of mappings-8x8 but it seems
reified, maybe this is why print doesn't know how to print it (whatever
this means)
 By the way, if you don't use ^:const the class is:
clojure.lang.PersistentVector (just as you'd expect), so probably ^:const
is doing some reifying (which maybe disallows changes to the vector?) and
yielding a different class - my guess (I don't really know what reify does
btw - just what I remember)


On Mon, Jan 21, 2013 at 2:08 AM, Jim - FooBar(); <jimpil1...@gmail.com>wrote:

>  wow! nice job AtKaaZ...so if I understood correctly there is no issue
> with my code yes? translate-position sits at the bottom of my API (cannot
> live without it)...
>
> Jim
>
>
>
> On 21/01/13 00:33, AtKaaZ wrote:
>
>  Caused by:
> RuntimeException Can't embed object in code, maybe print-dup not defined:
> clojure.core$reify__6186@4e5db277
>     clojure.lang.Util.runtimeException (Util.java:223)
>     clojure.lang.Compiler$ObjExpr.emitValue (Compiler.java:4571)
>     clojure.lang.Compiler$ObjExpr.emitValue (Compiler.java:4496)
>     clojure.lang.Compiler$ObjExpr.emitListAsObjectArray
> (Compiler.java:4392)
>     clojure.lang.Compiler$ObjExpr.emitValue (Compiler.java:4529)
>     clojure.lang.Compiler$ObjExpr.emitConstants (Compiler.java:4610)
>     clojure.lang.Compiler$ObjExpr.compile (Compiler.java:4072)
>     clojure.lang.Compiler$FnExpr.parse (Compiler.java:3808)
>     clojure.lang.Compiler.analyzeSeq (Compiler.java:6558)
>     clojure.lang.Compiler.analyze (Compiler.java:6361)
> Caused by:
> IllegalArgumentException *No method in multimethod 'print-dup' for
> dispatch value: class clojure.core$reify__6186*
>     clojure.lang.MultiFn.getFn (MultiFn.java:160)
>     clojure.lang.MultiFn.invoke (MultiFn.java:231)
>     clojure.core/pr-on (core.clj:3321)
>     clojure.lang.Var.invoke (Var.java:419)
>     clojure.lang.RT.print (RT.java:1739)
>     clojure.lang.RT.printString (RT.java:1718)
>     clojure.lang.Compiler$ObjExpr.emitValue (Compiler.java:4566)
>
>  to see this I had to edit clojure code
> /clojure/src/jvm/clojure/lang/Compiler.java line 4571
> by adding the cause to the throw (that ",e"):
> throw Util.runtimeException(
>                         "Can't embed object in code, maybe print-dup not
> defined: " +
>                         value,e);
>
>  any reason why that isn't there already?(I guess this was added later:
> the ability to pass the cause)
>
>
>
>
>  On Mon, Jan 21, 2013 at 1:20 AM, AtKaaZ <atk...@gmail.com> wrote:
>
>>  Actually, it's even simpler:
>>
>> (def ^:const
>> mappings-8x8
>>   (mapv #(apply vector-of :int %)
>>         [[0 0] [1 0] [2 0]])
>>   )
>>
>>  (class mappings-8x8) ;throws
>>  CompilerException java.lang.RuntimeException: Can't embed object in
>> code, maybe print-dup not defined: clojure.core$reify__6186@77771028,
>> compiling:
>>
>>
>> On Mon, Jan 21, 2013 at 1:17 AM, AtKaaZ <atk...@gmail.com> wrote:
>>
>>>    I've managed to reduce this to:
>>> (ns Clondie24.games.xx1)
>>>
>>> (def ^:const
>>> mappings-8x8
>>>
>>>   (mapv #(apply vector-of :int %)
>>>          [[0 0] [1 0] [2 0]])
>>>   )
>>>
>>>
>>> (defn translate [mappings]
>>>   (let [list-loc
>>>         (.indexOf mappings [0 1])]
>>>     ))
>>>
>>>
>>> (translate mappings-8x8);throws
>>>
>>>
>>>
>>>  ----
>>> => (pst *e 121312)
>>> CompilerException java.lang.RuntimeException: Can't embed object in
>>> code, maybe print-dup not defined: clojure.core$reify__6186@77771028,
>>> compiling:(Clondie24\games\xx1.clj:16:1)
>>>
>>>     clojure.lang.Compiler.analyzeSeq (Compiler.java:6566)
>>>     clojure.lang.Compiler.analyze (Compiler.java:6360)
>>>      clojure.lang.Compiler.eval (Compiler.java:6615)
>>>     clojure.lang.Compiler.load (Compiler.java:7062)
>>>     Clondie24.games.chess/eval19634 (NO_SOURCE_FILE:1)
>>>     clojure.lang.Compiler.eval (Compiler.java:6618)
>>>     clojure.lang.Compiler.eval (Compiler.java:6581)
>>>     clojure.core/eval (core.clj:2852)
>>>     clojure.main/repl/read-eval-print--6625 (main.clj:251)
>>>     clojure.main/repl/fn--6630/fn--6631 (main.clj:269)
>>>     clojure.main/repl/fn--6630 (main.clj:269)
>>>     clojure.main/repl (main.clj:267)
>>>     clojure.tools.nrepl.middleware.interruptible-eval/evaluate/fn--988
>>> (interruptible_eval.clj:58)
>>>     clojure.core/apply (core.clj:617)
>>>     clojure.core/with-bindings* (core.clj:1788)
>>>     clojure.tools.nrepl.middleware.interruptible-eval/evaluate
>>> (interruptible_eval.clj:43)
>>>
>>> clojure.tools.nrepl.middleware.interruptible-eval/interruptible-eval/fn--1029/fn--1032
>>> (interruptible_eval.clj:173)
>>>     clojure.core/comp/fn--4173 (core.clj:2330)
>>>     clojure.tools.nrepl.middleware.interruptible-eval/run-next/fn--1022
>>> (interruptible_eval.clj:140)
>>>     java.util.concurrent.ThreadPoolExecutor.runWorker
>>> (ThreadPoolExecutor.java:1110)
>>>     java.util.concurrent.ThreadPoolExecutor$Worker.run
>>> (ThreadPoolExecutor.java:603)
>>>     java.lang.Thread.run (Thread.java:722)
>>> Caused by:
>>> RuntimeException Can't embed object in code, maybe print-dup not
>>> defined: clojure.core$reify__6186@77771028
>>>
>>>     clojure.lang.Util.runtimeException (Util.java:219)
>>>     clojure.lang.Compiler$ObjExpr.emitValue (Compiler.java:4570)
>>>     clojure.lang.Compiler$ObjExpr.emitValue (Compiler.java:4496)
>>>     clojure.lang.Compiler$ObjExpr.emitListAsObjectArray
>>> (Compiler.java:4392)
>>>     clojure.lang.Compiler$ObjExpr.emitValue (Compiler.java:4529)
>>>     clojure.lang.Compiler$ObjExpr.emitConstants (Compiler.java:4609)
>>>     clojure.lang.Compiler$ObjExpr.compile (Compiler.java:4072)
>>>     clojure.lang.Compiler$FnExpr.parse (Compiler.java:3808)
>>>     clojure.lang.Compiler.analyzeSeq (Compiler.java:6557)
>>>     clojure.lang.Compiler.analyze (Compiler.java:6360)
>>>
>>>  to fix this, just comment out the "^:const" part, like so:
>>> (def ;^:const
>>>  now, doesn't throw.
>>>
>>>
>>> ---------
>>>
>>>  ///some extra stuff(ignore this):
>>> (def xam0 (translate mappings-8x8));works
>>> (println xam0)
>>>
>>> (let [ xam (translate 1 2 mappings-8x8) ]);this one throws: can't embed
>>> even before Wrong number of args (3)
>>>
>>>  ///end ignore
>>>
>>> Maybe someone can explain...
>>>
>>>  This was enjoyable ;)
>>>
>>>
>>>
>>>  On Mon, Jan 21, 2013 at 12:03 AM, Jim - FooBar(); <jimpil1...@gmail.com
>>> > wrote:
>>>
>>>>  yes exactly! In the commit that github shows last line 238 is line
>>>> 244 in my current branch...Since you're looking into it i can commit
>>>> everything now so we're all on the same page...
>>>>
>>>> Jim
>>>>
>>>>
>>>> On 20/01/13 21:10, AtKaaZ wrote:
>>>>
>>>> is this line 244?
>>>>
>>>> https://github.com/jimpil/Clondie24/blob/master/src/Clondie24/games/chess.clj#L238
>>>>
>>>>
>>>> On Sun, Jan 20, 2013 at 7:58 PM, Jim - FooBar(); 
>>>> <jimpil1...@gmail.com>wrote:
>>>>
>>>>> Hi everyone,
>>>>>
>>>>> I came back to a project of mine after a couple of months only to be
>>>>> surprised by some cryptic exception! Imagine a 2d vector:
>>>>>
>>>>> (def coords [[0 0] [0 1] [1 0]  [1 1]]) ;;vector of vectors of longs
>>>>>
>>>>> ;;but let's try ints which are cached:
>>>>>
>>>>> (def coords
>>>>>   (mapv #(apply vector-of :int %)  [[0 0] [0 1] [1 0]  [1 1]]))
>>>>> ;;vector of vectors of ints
>>>>>
>>>>>
>>>>> everything seems great right? well, now my namespaces don't even
>>>>> compile! This is my representation of the 'board' in a game which means
>>>>> that I'm only reading from this vector nothing else! I am getting
>>>>> CompilerException java.lang.RuntimeException: Can't embed object in code,
>>>>> maybe print-dup not defined: clojure.core$reify__6184@1eb42164,
>>>>> compiling:(Clondie24/games/chess.clj:244:1) where line 244 is just a 
>>>>> 'defn'
>>>>> with its argument vector...as soon as I comment out the conversion to
>>>>> unboxed int primitives everything works again! doing (pst) does not help 
>>>>> at
>>>>> all! Look at this:
>>>>>
>>>>> user=> (pst)
>>>>> CompilerException java.lang.RuntimeException: Can't embed object in
>>>>> code, maybe print-dup not defined: clojure.core$reify__6186@61c28cfb,
>>>>> compiling:(Clondie24/games/chess.clj:244:1)
>>>>>     clojure.lang.Compiler.analyzeSeq (Compiler.java:6566)
>>>>>     clojure.lang.Compiler.analyze (Compiler.java:6360)
>>>>>     clojure.lang.Compiler.analyzeSeq (Compiler.java:6547)
>>>>>     clojure.lang.Compiler.analyze (Compiler.java:6360)
>>>>>     clojure.lang.Compiler.access$100 (Compiler.java:37)
>>>>>     clojure.lang.Compiler$DefExpr$Parser.parse (Compiler.java:528)
>>>>>     clojure.lang.Compiler.analyzeSeq (Compiler.java:6559)
>>>>>     clojure.lang.Compiler.analyze (Compiler.java:6360)
>>>>>     clojure.lang.Compiler.analyze (Compiler.java:6321)
>>>>>     clojure.lang.Compiler.eval (Compiler.java:6622)
>>>>>     clojure.lang.Compiler.load (Compiler.java:7062)
>>>>>     clojure.lang.RT.loadResourceScript (RT.java:361)
>>>>> Caused by:
>>>>> RuntimeException Can't embed object in code, maybe print-dup not
>>>>> defined: clojure.core$reify__6186@61c28cfb
>>>>>     clojure.lang.Util.runtimeException (Util.java:219)
>>>>>     clojure.lang.Compiler$ObjExpr.emitValue (Compiler.java:4570)
>>>>>     clojure.lang.Compiler$ObjExpr.emitValue (Compiler.java:4496)
>>>>>     clojure.lang.Compiler$ObjExpr.emitListAsObjectArray
>>>>> (Compiler.java:4392)
>>>>>     clojure.lang.Compiler$ObjExpr.emitValue (Compiler.java:4529)
>>>>>     clojure.lang.Compiler$ObjExpr.emitConstants (Compiler.java:4609)
>>>>>     clojure.lang.Compiler$ObjExpr.compile (Compiler.java:4072)
>>>>>     clojure.lang.Compiler$FnExpr.parse (Compiler.java:3808)
>>>>>     clojure.lang.Compiler.analyzeSeq (Compiler.java:6557)
>>>>>     clojure.lang.Compiler.analyze (Compiler.java:6360)
>>>>> nil
>>>>>
>>>>> this is clearly not my code! everything is clojure.lang.Compiler
>>>>> related!
>>>>> what is happening exactly? can anyone explain? I'm not doing anything
>>>>> 'weird' in the function reported in the exception just reading  the 
>>>>> vector.
>>>>>
>>>>> Jim
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> 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
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> I may be wrong or incomplete.
>>>> Please express any corrections / additions,
>>>> they are encouraged and appreciated.
>>>> At least one entity is bound to be transformed if you do ;)
>>>>  --
>>>> 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
>>>>
>>>
>>>
>>>
>>> --
>>> I may be wrong or incomplete.
>>> Please express any corrections / additions,
>>> they are encouraged and appreciated.
>>> At least one entity is bound to be transformed if you do ;)
>>>
>>
>>
>>
>> --
>> I may be wrong or incomplete.
>> Please express any corrections / additions,
>> they are encouraged and appreciated.
>> At least one entity is bound to be transformed if you do ;)
>>
>
>
>
> --
> I may be wrong or incomplete.
> Please express any corrections / additions,
> they are encouraged and appreciated.
> At least one entity is bound to be transformed if you do ;)
>  --
> 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
>



-- 
I may be wrong or incomplete.
Please express any corrections / additions,
they are encouraged and appreciated.
At least one entity is bound to be transformed if you do ;)

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