<div dir="ltr">Hi All,<div class="gmail_extra"><br><div class="gmail_quote">On Mon, Mar 26, 2018 at 9:22 PM, Chris Muller <span dir="ltr"><<a href="mailto:asqueaker@gmail.com" target="_blank">asqueaker@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">I like the better-named arguments, but may we please keep an abstract<br>
implementation up in Boolean anyway?<br></blockquote><div><br></div><div>The problem is that the abstract implementation is wrong.  Here it is:</div><div><br></div><div>xor: aBoolean </div><div><span class="gmail-Apple-tab-span" style="white-space:pre"> </span>"Exclusive OR. Answer true if the receiver is not equivalent to aBoolean."</div><div><br></div><div><span class="gmail-Apple-tab-span" style="white-space:pre">  </span>^(self == aBoolean) not </div><div><br></div><div>a) it accepts non-booleans</div><div>b) it answers true when given a block</div><div><br></div><div>I believe what we want is</div><div><br></div><div><div>xor: aBooleanOrBlock</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">        </span>"Exclusive OR. Answer true if the receiver is not equivalent to aBoolean."</div><div><br></div><div><span class="gmail-Apple-tab-span" style="white-space:pre">  </span>^ aBooleanOrBlock value ifTrue: [self not] ifFalse: [self]</div></div><div><br></div><div><br></div><div>I'm happy to commit this if people agree.  But personally I prefer the subclassResponsibility.  Now, I have some angels dancing somewhere I'd like to check out...</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
<br>
Besides being documentative (is that a word?), for a<br>
semi-controversial change like this, it allows users to easily<br>
configure back to standard Smalltalk implementation (non<br>
block-supporting) by merely removing subclass selectors.  No need to<br>
compile new source..<br>
<div class="gmail-HOEnZb"><div class="gmail-h5"><br>
<br>
<br>
On Mon, Mar 26, 2018 at 6:24 PM,  <<a href="mailto:commits@source.squeak.org">commits@source.squeak.org</a>> wrote:<br>
> A new version of Kernel was added to project The Inbox:<br>
> <a href="http://source.squeak.org/inbox/Kernel-cbc.1164.mcz" rel="noreferrer" target="_blank">http://source.squeak.org/<wbr>inbox/Kernel-cbc.1164.mcz</a><br>
><br>
> ==================== Summary ====================<br>
><br>
> Name: Kernel-cbc.1164<br>
> Author: cbc<br>
> Time: 26 March 2018, 4:24:34.650291 pm<br>
> UUID: 1db3c61f-3486-5847-bb7b-<wbr>2e3409818f92<br>
> Ancestors: Kernel-cbc.1163<br>
><br>
> Removed implementation from Boolean>>xor: (made it sublcass responsibility).<br>
> Chose a better method argument name for #xor:<br>
><br>
> =============== Diff against Kernel-cbc.1163 ===============<br>
><br>
> Item was changed:<br>
>   ----- Method: Boolean>>xor: (in category 'logical operations') -----<br>
> + xor: aBooleanOrBlock<br>
> +       "Exclusive OR. Answer true if self is not equivalent to aBooleanOrBlock.<br>
> +       aBooleanOrBlock is either a boolean, or evaluates to a boolean."<br>
> - xor: aBoolean<br>
> -       "Exclusive OR. Answer true if the receiver is not equivalent to aBoolean."<br>
><br>
> +       ^self subclassResponsibility!<br>
> -       ^(self == aBoolean) not!<br>
><br>
> Item was changed:<br>
>   ----- Method: False>>xor: (in category 'logical operations') -----<br>
> + xor: aBooleanOrBlock<br>
> +       "aBooleanOrBlock is either a boolean, or an object who's #value returns a boolean (usually a block)."<br>
> +       ^aBooleanOrBlock value ifTrue: [ true ] ifFalse: [ false ]!<br>
> - xor: aBoolean<br>
> -       "aBoolean is either a boolean, or an object who's #value returns a boolean (usually a block)."<br>
> -       ^aBoolean value ifTrue: [ true ] ifFalse: [ false ]!<br>
><br>
> Item was changed:<br>
>   ----- Method: True>>xor: (in category 'logical operations') -----<br>
> + xor: aBooleanOrBlock<br>
> +       "aBooleanOrBlock is either a boolean, or an object who's #value returns a boolean (usually a block)."<br>
> +       ^aBooleanOrBlock value ifTrue: [ false ] ifFalse: [ true ]!<br>
> - xor: aBoolean<br>
> -       "aBoolean is either a boolean, or an object who's #value returns a boolean (usually a block)."<br>
> -       ^aBoolean value ifTrue: [ false ] ifFalse: [ true ]!<br>
><br>
><br>
<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div><span style="font-size:small;border-collapse:separate"><div>_,,,^..^,,,_<br></div><div>best, Eliot</div></span></div></div></div>
</div></div>