New idiom for conditional testing?
Randal L. Schwartz
merlyn at stonehenge.com
Sat Sep 29 17:12:31 UTC 2001
>>>>> "danielv" == danielv <danielv at netvision.net.il> writes:
danielv> ^{[self class = aRenameVariableChange class].
danielv> [className = aRenameVariableChange changeClassName].
danielv> [isMeta = aRenameVariableChange isMeta].
danielv> [oldName = aRenameVariableChange oldName].
danielv> [newName = aRenameVariableChange newName]} allTrue
danielv> Note that the conditions should be tested in order and lazily - stops at
danielv> the first false.
danielv> The implementation is as follows -
Collection> allTrue
danielv> ^self detect: [:e | e value not] ifNone: [nil]) isNil
Well, rather than alter Collection for this one-off, you could
keep it all here with:
{[self class = aRenameVariableChange class].
[className = aRenameVariableChange changeClassName].
[isMeta = aRenameVariableChange isMeta].
[oldName = aRenameVariableChange oldName].
[newName = aRenameVariableChange newName]}
do: [:e | e value ifFalse: [^false]].
^true
But the regularity of the pattern still irks me. You're still
faster cutting and pasting some of that code than simply typing it,
which is always a red flag for me. Maybe an "associationsDo:", like
{(self class) -> #class.
classname -> #classChangeName.
isMeta -> #isMeta.
oldname -> #oldName.
newName -> #newName}
associationsDo:
[:e | e key = (aRenameVariableChange perform: e value) ifFalse: [^false]].
^true
No, maybe that's no better. :)
--
Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095
<merlyn at stonehenge.com> <URL:http://www.stonehenge.com/merlyn/>
Perl/Unix/security consulting, Technical writing, Comedy, etc. etc.
See PerlTraining.Stonehenge.com for onsite and open-enrollment Perl training!
More information about the Squeak-dev
mailing list
|