Fun with Number readFrom: What should we do ?

stéphane ducasse ducasse at iam.unibe.ch
Fri Apr 28 09:44:43 UTC 2006


submit  tests!

Stef

On 28 avr. 06, at 01:21, Francisco Garau wrote:

> I totally agree with Diego.
>
> Moreover, I think that each message should do the parsing on  
> exactly one format. Something like this:
>
>    (SqNumberParser on: '1.23') number
>    (SqNumberParser on: '1.23e4) scientificNotation; number
>    (SqNumberParser on: '2r1111') base2Notation; number
>    (SqNumberParser on: '') cvsNotation; number "would answer 0"
>
> And then we can add a top level method to try several alternatives  
> (in a specific order)
>
>    SqNumberParser>>parse
>        try scientificNotation ifTrue: [^got it]
>        try xxxNotation ifTrue: [^got it]
>        try base2Notation ifTrue: [^got it]
>        try base16Notation ifTrue: [^got it]
>        else ParseException signal
>
> This would be both flexible and generic. Those who know precisely  
> the string format of an expected number, can use the specific parse  
> message. And if you don't know the string format, just use the  
> generic parse message.
>
> String>>sqNumber
>    ^(SqNumberParser on: self) parse; number
>
> By using the Sq prefix, we would avoid clashing with existing  
> methods. The code that is relying on the current funny behaviour  
> would remain unaffected.
>
> Cheers,
> Francisco
>
>
> ----- Original Message ----- From: "Diego Fernandez"  
> <diegof79 at gmail.com>
> To: <ncellier at ifrance.com>; "The general-purpose Squeak developers  
> list" <squeak-dev at lists.squeakfoundation.org>
> Sent: Thursday, April 27, 2006 2:59 PM
> Subject: Re: Fun with Number readFrom: What should we do ?
>
>
>> My proposition is:
>>
>> Number>>readFrom: aStringOrStream
>>     ^self readFrom: aStringOrStream ifFail: [^self error: 'cannot  
>> read a
>> number']
>>
>> If nil is what you want, you will have to write:
>>     value := Number readFrom: aStream ifFail: [nil].
>> A little longer than your proposition:
>>     value := Number readfrom: aStream.
>
> The mine is:
> Number>>readFrom: aStringOrStream
>      ^NumberParser new parse: aStringOrStream
>
> NumberParser>>parse: aStringOrStream
>       "on failure"
>        NumberParsingException signal
>        "or just ParseException"
>
> I think that #readFrom: must be an extension of Number.
> So if you want more control of the parsing you can configure an
> instance of NumberParser.
> (may be you can have a FortranNumberParser :)).
>
>




More information about the Squeak-dev mailing list