Fun with Number readFrom: What should we do ?
Andreas Raab
andreas.raab at gmx.de
Wed Apr 26 21:45:44 UTC 2006
Clearly, that's a bug not a feature. And it should raise an exception -
the empty string is *not* a valid zero value (but if anyone needs that
behavior they can handle the exception). About stream rewinding: Doesn't
matter - I don't think anyone should rely on stream positioning in the
case of an error.
Cheers,
- Andreas
nicolas cellier wrote:
> Hello all,
>
> i noticed that Number readFrom: silently answers 0 when it does not encounter
> some digits:
>
> Number readFrom: '' readStream.
> Number readFrom: 'foo-bar' readStream.
> Number readFrom: '.' readStream.
>
> will all answer 0. Well, i believe there must have been discussions whether or
> not raising an exception in this case, at least recently in vw list.
> But let us say that answering 0 is a feature.
>
>
> Then try:
>
> Number readFrom: 'rules are made for the others' readStream.
>
> fail with an error: 'Invalid radix'.
> Well, well, don't tell me it is a feature.
>
>
> And just for fun, this one:
>
> Number readFrom: '.e' readStream.
>
> ah, another feature UndefinedObject doesNotUnderstand: #digitValue.
>
>
> Still want to play ? Try this one:
>
> Number readFrom: '--1' readStream.
>
> Amazing what we can do with just one readFrom:...
>
>
> Funny, it also accept some un-Smalltalk-ish syntax:
>
> Number readFrom: '.1e2'.
> Number readFrom: '1.e1'.
>
> will answer a Float (10.0 like FORTRAN).
> I suppose this one is intentionnaly a feature.
>
>
> I will not analyze here the cases when the stream advance, and the cases when
> it does not... That would be boring...
>
>
> Now i am trying to implement Float readFrom without accumulating rounding
> errors, and this can be the right time for deciding about these cases.
>
> What do you vote for ? exception, answering 0, any other idea ?
> What to do with the stream in case of error ? rewind, keep in place ?
> I'am waiting for your comments.
>
> Nicolas
>
>
>
More information about the Squeak-dev
mailing list
|