And looking at this in the code - there are quite a few variations of #includes… that I don’t think it makes sense to write the mirror of all of them. Not it is...
> On 18 Mar 2019, at 16:48, Tim Mackinnon <tim@testit.works> wrote: > > Thanks guys - I always learn something new from these threads. > >> On 17 Mar 2019, at 06:56, Richard O'Keefe <rao...@gmail.com >> <mailto:rao...@gmail.com>> wrote: >> >> (1) As it happens, my Smalltalk library *does* have >> #excludes: and #identityExcludes: >> (2) The definitions are trivial. >> excludes: item >> ^(self includes: item) not >> identityExcludes: item >> ^(self identityIncludes: item) not >> >> If you want to execute aBlock when aString is not all zeros >> and ones, just do >> (aString allSatisfy: [:each | each = $0 or: [each = $1]]) >> ifFalse: [aBlock value]. >> or >> (aString anySatisfy: [:each | each ~= $0 and: [each ~= $1]]) >> ifTrue: [aBlock value]. >> or >> ('01' includesAll: aString) ifFalse: [aBlock value]. >> >> >> On Sat, 16 Mar 2019 at 11:33, Tim Mackinnon <tim@testit.works >> <mailto:tim@testit.works>> wrote: >> Hi - in my quest to understand the edgier details of Pharo (and Smalltalk) - >> and driven by fresh thoughts of completing exercism exercises - I was >> surprised to find that there is no #excludes: operation on collection to >> mirror the #includes: operation? >> >> I was curious about this - its seems a strange omission? >> >> Of course I can inverse it with not, or do things a different way - but we >> have ifTrue: mirrored with ifFalse, empty/notEmpty so am I missing something? >> >> I wanted to write something like >> >> >> aString detect: [:c | ($0 to: $1) excludes: c] ifFound: aBlock. (Evaluate a >> block if the string isn’t all 0 and 1’s) >> >> >> Of course I can write this as: >> >> (aString reject: [:c | c = $0 | c = $1)) ifNotEmpty: aBlock >> >> But as recent messages in this vein have shown me (and taught me lots - >> thanks to those answering), the answer is often not what I thought. >> >> Tim >> >> >