@@ -406,20 +406,20 @@ <h1 class="title">Clean object printing by removing extraneous</h1>
406406< 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 >
407407</ div >
408408< div class ="printedClojure ">
409- < 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 "> 0x3eb022c2 </ span > < span class ="st "> "clojure.lang.MultiFn@3eb022c2 "</ span > ]</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
409+ < 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 "> 0xec824ca </ span > < span class ="st "> "clojure.lang.MultiFn@ec824ca "</ span > ]</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
410410</ div >
411411< div class ="sourceClojure ">
412412< 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 >
413413</ div >
414414< div class ="printedClojure ">
415- < 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 "> 0x232f05b0 </ span > < span class ="st "> "java.lang.Object@232f05b0 "</ span > ]</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
415+ < 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 "> 0x56ec31ca </ span > < span class ="st "> "java.lang.Object@56ec31ca "</ span > ]</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
416416</ div >
417417< 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 >
418418< div class ="sourceClojure ">
419419< 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 >
420420</ div >
421421< div class ="printedClojure ">
422- < 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 "> 0x40a0c58c </ span > < span class ="st "> "clojure.core.async.impl.channels.ManyToManyChannel@40a0c58c "</ span > ]</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
422+ < 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 "> 0x1ece307c </ span > < span class ="st "> "clojure.core.async.impl.channels.ManyToManyChannel@1ece307c "</ span > ]</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
423423</ div >
424424< div class ="quarto-figure quarto-figure-center ">
425425< figure class ="figure ">
@@ -432,14 +432,14 @@ <h1 class="title">Clean object printing by removing extraneous</h1>
432432< 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 >
433433</ div >
434434< div class ="printedClojure ">
435- < 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$eval22346$fn__22347 < span class ="bn "> 0x43f3ff50 </ span > < span class ="st "> "clojure.print_object.remove_extraneous$eval22346$fn__22347@43f3ff50 "</ span > ]</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
435+ < 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$eval22346$fn__22347 < span class ="bn "> 0x17a3aa29 </ span > < span class ="st "> "clojure.print_object.remove_extraneous$eval22346$fn__22347@17a3aa29 "</ span > ]</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
436436</ div >
437437< 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 >
438438< div class ="sourceClojure ">
439439< 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 >
440440</ div >
441441< div class ="printedClojure ">
442- < 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$eval22350$fn__22351$fn__22352 < span class ="bn "> 0x677f0c10 </ span > < span class ="st "> "clojure.print_object.remove_extraneous$eval22350$fn__22351$fn__22352@677f0c10 "</ span > ]</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
442+ < 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$eval22350$fn__22351$fn__22352 < span class ="bn "> 0x11ad162d </ span > < span class ="st "> "clojure.print_object.remove_extraneous$eval22350$fn__22351$fn__22352@11ad162d "</ span > ]</ span > </ code > < button title ="Copy to Clipboard " class ="code-copy-button "> < i class ="bi "> </ i > </ button > </ pre > </ div >
443443</ div >
444444< 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 >
445445< div class ="sourceClojure ">
0 commit comments