Thread overview
Strange behavior std.range.takeNone
Apr 07, 2015
Dennis Ritchie
Apr 07, 2015
Dennis Ritchie
Apr 07, 2015
Andrea Fontana
Apr 07, 2015
Dennis Ritchie
April 07, 2015
Hi,
Is it OK?

-----
import std.stdio : writeln;
import std.range : takeNone;

void main() {

	auto s = takeNone("test");

	s ~= 5;

	writeln(s); // prints ♣
}
-----
Windows 8.1 x64, DMD 2.067.0
April 07, 2015
On Tuesday, 7 April 2015 at 02:24:00 UTC, Dennis Ritchie wrote:
> Is it OK?
Although, perhaps, everything is fine. I just thought that creates takeNone not string type string, and the string array of type string[].

import std.stdio : writeln;

void main() {

	string s;

	s ~= 5;

	writeln(s); // prints ♣
}

So I mixed up with this case. Everything is OK.

import std.range : takeNone;

void main() {
	
	auto s = takeNone(["test"]);
	
	// s ~= 5; // Error: cannot append type int to type string[]
}
April 07, 2015
Yes it is.

takeNone() take a char from a string.

So you are going to append a char (with code 5) on the next line.
If you replace that line with:

s ~= 65;

it will print "A".  (65 is ascii code for letter 'A')

On Tuesday, 7 April 2015 at 02:24:00 UTC, Dennis Ritchie wrote:
> Hi,
> Is it OK?
>
> -----
> import std.stdio : writeln;
> import std.range : takeNone;
>
> void main() {
>
> 	auto s = takeNone("test");
>
> 	s ~= 5;
>
> 	writeln(s); // prints ♣
> }
> -----
> Windows 8.1 x64, DMD 2.067.0

April 07, 2015
On Tuesday, 7 April 2015 at 08:49:58 UTC, Andrea Fontana wrote:
> Yes it is.
>
> takeNone() take a char from a string.
>
> So you are going to append a char (with code 5) on the next line.
> If you replace that line with:
>
> s ~= 65;
>
> it will print "A".  (65 is ascii code for letter 'A')

Thanks. I am aware :)