<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Wed, Jul 25, 2018 at 10:50 PM Nicholas Chammas <<a href="mailto:nicholas.chammas@gmail.com" target="_blank">nicholas.chammas@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div dir="ltr">Indeed. Thanks for the counter-example. I think the correct translation is as follows:</div><div><div>    food = spam?.eggs?.bacon</div><div>Becomes:</div><div>    food = None</div><div>    if spam is not None and spam.eggs is not None:</div><div>        food = spam.eggs.bacon </div></div></div></div></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div></div><div>Did I get it right now? :)</div></div></div></blockquote><div><br></div><div>Nope, still not right, I'm afraid! </div><div><br></div><div>Chris Angelica provided a more accurate translation.  Do you not see that the fact that your *second* try at understanding the actual behavior is still wrong suggest that this operator is a HUGE bug magnet?!</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div>So, shame on me. I think this particular mistake reflects more on me than on PEP 505, but I see how this kind of mistake reflects badly on the folks advocating for the PEP (or at least, playing devil's advocate).<br></div></div></div>
</blockquote></div><div><br></div>I really, really don't.  I think you see an intuitive behavior that would be nice and useful in a certain area.  That behavior just isn't what the PEP proposes though... it's kinda-sorta close enough to be lured into thinking it's a good idea.<div><br></div><div>Honestly, I think the behavior of GreedyAccess in my little library I wrote over the last couple nights is FAR more often what programmers ACTUALLY want than NullCoalesce is.  Even Steve Dower—in the PEP and in this discussion—acknowledges the appeal and utility of the GreedyAccess behavior.  It's in the "Rejected Ideas" section, which is fair enough.</div><div><br></div><div>But in a library like mine... or indeed, in a much better library that you or someone else writes... it's perfectly easy to have both classes, and choose which behavior is more useful for your case.  A new syntax feature can't let user decide which behavior (or maybe some other behavior altogether) is most useful for their specific case.  A library does that easily[*].</div><div><br></div><div>[*] In version 0.1.1 of coalescing—changed from 0.1<font size="1">—I added the option to use a sentinel other than None if you want.  I'm not sure how useful that is, but that idea was in some old PEPs, and I think in the Rejected Ideas of 505.  With a library, I have a parameter that need not be used to switch that[**].  E.g.:</font></div><div><font size="1"><br></font></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><font size="1"><font face="monospace, monospace">NullCoalesce(foo, sentinel=float('nan')).bar.baz.blam</font><br><br></font></blockquote><div><div>[**] Yes, I even handle NaN's in a special way because they are non-equal even to themselves.  You could use empty string, or 0, or my_null = object(), or whatever.</div>-- <br><div dir="ltr" class="m_3127176884869300905gmail_signature" data-smartmail="gmail_signature">Keeping medicines from the bloodstreams of the sick; food <br>from the bellies of the hungry; books from the hands of the <br>uneducated; technology from the underdeveloped; and putting <br>advocates of freedom in prisons.  Intellectual property is<br>to the 21st century what the slave trade was to the 16th.<br></div></div></div>