numericValue for (unicode) characters
    H. S. Teoh 
    hsteoh at quickfur.ath.cx
       
    Thu Jan  3 13:49:28 PST 2013
    
    
  
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
    
    
More information about the Digitalmars-d
mailing list