On Monday, January 30, 2012 21:01:38 bearophile wrote: > In Python int() and float() convert a string into a number even if it contains some whitespace before and after the number: > >>> s = " 12\n" > >>> int(s) > > 12 > > >>> float(s) > > 12.0 > > > In D to!int(" 12\n") gives a run-time error. So time ago I have weakly > asked Andrei to change to!int, to let it ignore leading and trailing > whitespace, but he has ignored my request. > > A leading newline comes often from input stdin.readln() and other sources. > So in D you need to add a strip(): > > int n = to!int(stdin.readln().strip()); > > I sometimes forget to add the strip(). Do you know why Andrei has not > appreciated the idea of to!int and similar functions to ignore leading and > trailing whitespace?
He's probably completely forgotten about it, and it's the sort of thing that he's likely to consider bikeshedding at this point - particularly since he's increasingly against making small changes like this. Also, the argument can easily be made that " 10 " is _not_ a number. It's a number surrounded by spaces. In general, std.conv.to does exact conversions, and to!int(" 10 ") is _not_ an exact conversion, since it includes characters which are not digits or a leading minus sign. std.conv.parse, on the other hand, deals with the spaces, because it's parsing the string rather than converting the whole thing. Also, if you _want_ to do an exact conversion, and std.conv.to removed the whitespace for you, then you couldn't use std.conv.to. You'd have to create your own. On the other hand, if you want to ignore whitespace in the conversion, you can easily wrap std.conv.to to do it. So, it's more composable as it is. There are obviously arguments for having std.conv.to ignore whitespace as well (you're making them), but at this point, I think that it's simply a matter of using parse rather than std.conv.to (or stripping the string first) if you want to ignore whitespace. I don't see std.conv.to changing. And as far Andrei, as I said, he's increasingly against making small changes like this. He wants substantial work done, not arguments over shifting around small stuff. - Jonathan M Davis