Am Tue, 31 Dec 2013 13:09:34 +0000 schrieb "Jeroen Bollen" <jbin...@gmail.com>:
> On Monday, 30 December 2013 at 02:59:23 UTC, Marco Leise wrote: > > Am Sun, 29 Dec 2013 22:03:14 +0000 > > schrieb "Jeroen Bollen" <jbin...@gmail.com>: > > > >> On Sunday, 29 December 2013 at 18:13:30 UTC, Jakob Ovrum wrote: > >> > On Sunday, 29 December 2013 at 17:25:39 UTC, Jeroen Bollen > >> > wrote: > >> >> Wouldn't byline return an empty string if the inputstream > >> >> is exhausted but not closed? > >> > > >> > No, both `readln` and `byLine` will block until either EOL > >> > or EOF. They differ in their handling of EOF - `readln` > >> > returns an empty string, while the result of `byLine` > >> > reports empty (it is a range) and calling `front` is an > >> > error. > >> > >> But wouldn't that mean I'd still end up making my char[] > >> mutable, as I still need to manually remove the last > >> character, AFTER I checked it's not empty? > > > > No, strings have immutable characters, but there is nothing > > wrong with using only part of it as an array slice: > > > > string s = readln(); > > s = s[0 .. $-1]; > > > > (just to illustrate) > I'm not talking about string though, I know you can resize a > string, as it's an alias for immutable(char)[], but an immutable > string would be immutable(immutable(char)[]), which is an > immutable(charr[]). A mutable string would be immutable(char)[] > which is the problem! Why does it need to be mutable if it won't > ever change anyway! I guess I just don't see what an immutable string buys you. The mutable part in a string is just a pointer and length pair. Just write: immutable s = readln()[0 .. $-1]; and you have an immutable string at no cost. -- Marco