@@ -401,20 +401,20 @@ <h1 class="title">Clean object printing by removing extraneous</h1>
401401< span id ="cb1-2 "> < a href ="#cb1-2 " aria-hidden ="true " tabindex ="-1 "> </ a > (< span class ="va "> #'clojure.core/print-object</ span > x w))</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
402402</ div >
403403< div class ="printedClojure ">
404- < div class ="sourceCode " id ="cb2 "> < pre class ="sourceCode clojure code-with-copy "> < code class ="sourceCode clojure "> < span id ="cb2-1 "> < a href ="#cb2-1 " aria-hidden ="true " tabindex ="-1 "> </ a > #object[clojure.lang.MultiFn < span class ="bn "> 0x3c1a6d8c </ span > < span class ="st "> "clojure.lang.MultiFn@3c1a6d8c "</ span > ]</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
404+ < div class ="sourceCode " id ="cb2 "> < pre class ="sourceCode clojure code-with-copy "> < code class ="sourceCode clojure "> < span id ="cb2-1 "> < a href ="#cb2-1 " aria-hidden ="true " tabindex ="-1 "> </ a > #object[clojure.lang.MultiFn < span class ="bn "> 0xad7cc4c </ span > < span class ="st "> "clojure.lang.MultiFn@ad7cc4c "</ span > ]</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
405405</ div >
406406< div class ="sourceClojure ">
407407< div class ="sourceCode " id ="cb3 "> < pre class ="sourceCode clojure code-with-copy "> < code class ="sourceCode clojure "> < span id ="cb3-1 "> < a href ="#cb3-1 " aria-hidden ="true " tabindex ="-1 "> </ a > (Object.)</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
408408</ div >
409409< div class ="printedClojure ">
410- < div class ="sourceCode " id ="cb4 "> < pre class ="sourceCode clojure code-with-copy "> < code class ="sourceCode clojure "> < span id ="cb4-1 "> < a href ="#cb4-1 " aria-hidden ="true " tabindex ="-1 "> </ a > #object[java.lang.Object < span class ="bn "> 0x1e98ee48 </ span > < span class ="st "> "java.lang.Object@1e98ee48 "</ span > ]</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
410+ < div class ="sourceCode " id ="cb4 "> < pre class ="sourceCode clojure code-with-copy "> < code class ="sourceCode clojure "> < span id ="cb4-1 "> < a href ="#cb4-1 " aria-hidden ="true " tabindex ="-1 "> </ a > #object[java.lang.Object < span class ="bn "> 0x18105d14 </ span > < span class ="st "> "java.lang.Object@18105d14 "</ span > ]</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
411411</ div >
412412< p > The syntax is < code > #object[CLASS-NAME HASH toString())]</ code > and as you can see, the toString of an Object is < code > CLASS-NAME@HASH</ code > . For most objects this becomes quite a long string.</ p >
413413< div class ="sourceClojure ">
414414< div class ="sourceCode " id ="cb5 "> < pre class ="sourceCode clojure code-with-copy "> < code class ="sourceCode clojure "> < span id ="cb5-1 "> < a href ="#cb5-1 " aria-hidden ="true " tabindex ="-1 "> </ a > (async/chan)</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
415415</ div >
416416< div class ="printedClojure ">
417- < div class ="sourceCode " id ="cb6 "> < pre class ="sourceCode clojure code-with-copy "> < code class ="sourceCode clojure "> < span id ="cb6-1 "> < a href ="#cb6-1 " aria-hidden ="true " tabindex ="-1 "> </ a > #object[clojure.core.async.impl.channels.ManyToManyChannel < span class ="bn "> 0x4a6ed38 </ span > < span class ="st "> "clojure.core.async.impl.channels.ManyToManyChannel@4a6ed38 "</ span > ]</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
417+ < div class ="sourceCode " id ="cb6 "> < pre class ="sourceCode clojure code-with-copy "> < code class ="sourceCode clojure "> < span id ="cb6-1 "> < a href ="#cb6-1 " aria-hidden ="true " tabindex ="-1 "> </ a > #object[clojure.core.async.impl.channels.ManyToManyChannel < span class ="bn "> 0x674fee6d </ span > < span class ="st "> "clojure.core.async.impl.channels.ManyToManyChannel@674fee6d "</ span > ]</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
418418</ div >
419419< div class ="quarto-figure quarto-figure-center ">
420420< figure class ="figure ">
@@ -427,14 +427,14 @@ <h1 class="title">Clean object printing by removing extraneous</h1>
427427< div class ="sourceCode " id ="cb7 "> < pre class ="sourceCode clojure code-with-copy "> < code class ="sourceCode clojure "> < span id ="cb7-1 "> < a href ="#cb7-1 " aria-hidden ="true " tabindex ="-1 "> </ a > (< span class ="kw "> fn</ span > [x] x)</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
428428</ div >
429429< div class ="printedClojure ">
430- < div class ="sourceCode " id ="cb8 "> < pre class ="sourceCode clojure code-with-copy "> < code class ="sourceCode clojure "> < span id ="cb8-1 "> < a href ="#cb8-1 " aria-hidden ="true " tabindex ="-1 "> </ a > #object[clojure.print_object.remove_extraneous$eval22436$fn__22437 < span class ="bn "> 0x3e871f3 </ span > < span class ="st "> "clojure.print_object.remove_extraneous$eval22436$fn__22437@3e871f3 "</ span > ]</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
430+ < div class ="sourceCode " id ="cb8 "> < pre class ="sourceCode clojure code-with-copy "> < code class ="sourceCode clojure "> < span id ="cb8-1 "> < a href ="#cb8-1 " aria-hidden ="true " tabindex ="-1 "> </ a > #object[clojure.print_object.remove_extraneous$eval22436$fn__22437 < span class ="bn "> 0x54e1dc9a </ span > < span class ="st "> "clojure.print_object.remove_extraneous$eval22436$fn__22437@54e1dc9a "</ span > ]</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
431431</ div >
432432< p > It’s quite easy to miss the fact that it is a function as we are looking for a tiny little < code > fn</ code > in a sea of text. If, like me, you are fond of the < a href ="../../code_interview/beating/with_stupid_stuff/z_combinator_gambit.html "> odd lambda calculus excursion</ a > , things get even more hectic.</ p >
433433< div class ="sourceClojure ">
434434< div class ="sourceCode " id ="cb9 "> < pre class ="sourceCode clojure code-with-copy "> < code class ="sourceCode clojure "> < span id ="cb9-1 "> < a href ="#cb9-1 " aria-hidden ="true " tabindex ="-1 "> </ a > ((< span class ="kw "> fn</ span > [x] (< span class ="kw "> fn</ span > [v] ((x x) v))) (< span class ="kw "> fn</ span > [y] y))</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
435435</ div >
436436< div class ="printedClojure ">
437- < div class ="sourceCode " id ="cb10 "> < pre class ="sourceCode clojure code-with-copy "> < code class ="sourceCode clojure "> < span id ="cb10-1 "> < a href ="#cb10-1 " aria-hidden ="true " tabindex ="-1 "> </ a > #object[clojure.print_object.remove_extraneous$eval22440$fn__22441$fn__22442 < span class ="bn "> 0x18faa963 </ span > < span class ="st "> "clojure.print_object.remove_extraneous$eval22440$fn__22441$fn__22442@18faa963 "</ span > ]</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
437+ < div class ="sourceCode " id ="cb10 "> < pre class ="sourceCode clojure code-with-copy "> < code class ="sourceCode clojure "> < span id ="cb10-1 "> < a href ="#cb10-1 " aria-hidden ="true " tabindex ="-1 "> </ a > #object[clojure.print_object.remove_extraneous$eval22440$fn__22441$fn__22442 < span class ="bn "> 0x1d763ab2 </ span > < span class ="st "> "clojure.print_object.remove_extraneous$eval22440$fn__22441$fn__22442@1d763ab2 "</ span > ]</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
438438</ div >
439439< p > Yikes! what an eyesore. This is not an academic issue specific to lambda calculus. Any function created from inside a function is helpfully identifiable through the < code > fn$fn</ code > nesting. We create these quite regularly, and they are often printed in stack traces. I’m sure you have seen them when you map an inline function across a seq, and there is a bug in the anonymous function.</ p >
440440< div class ="sourceClojure ">
0 commit comments