On Thu, Jan 03, 2013 at 08:40:47PM +0100, monarch_dodra wrote:
[...]
> Or, you know... I could just implement both at the same time. It's
> not like there's an *urgency* for the ascii version or anything. I
> think I'll just do that.
> 
> So... do we agree on
> ascii: int - not found => -1
> uni: double - not found => nan
[...]

LGTM. :)

I did think of what might happen if somebody wrote an int cast for
std.uni.numericValue:

        void sloppyProgrammersFunction(dchar ch) {
                // First attempt: compiler error: can't implicitly
                // convert double -> int ...
                //int val = std.uni.numericValue(ch);

                // ... so sloppy programmer inserts a cast
                int val = cast(int)std.uni.numericValue(ch);

                // On Linux/64, if numericValue returns nan, this prints
                // -int.max.
                writeln(val);

                // So this should work:
                if (val < 0) {
                        // (In fact, it will still work if
                        // std.ascii.numericValue were used instead.)
                        writeln("Sloppy code caught the problem correctly!");
                }
        }

So it seems that everything should be alright.

This particular example occurred to me, 'cos I'm thinking of how often
one wishes to extract an integral value from a string, and usually one
doesn't think that floating point is necessary(!), so the cast from
double is a rather big temptation (even though it's wrong!).


T

-- 
Tell me and I forget. Teach me and I remember. Involve me and I understand. -- 
Benjamin Franklin

Reply via email to