Re: Need help: Return reference slice
Thank you very much for your additions. I am still new to D so I am glad to see solutions from experienced D programmers.
Need help: Return reference slice
Hello, I would like to create a D function that returns a slice of a string. This slice shall be a reference to a part of the string argument. Is this generally possible in D? This is the function: auto ref betweenTwoStrings(T)(inout T src, string start, string end) { long a = src.countUntil(start); if (a 0) return src; // null a += start.length; long b = src[a..$].countUntil(end); if (b 0) return src; // null b += a; return src[a..b]; } I would like to have something like that: char[] buf; // already filled array char[] partOfBuf = betweenTwoStrings(buf, START, END); partOfBuf[0] = 'a'; // THIS should also change the 'buf' variable assert(buf[0] == 'a'); Thanks for your help
Re: Need help: Return reference slice
On Wednesday, 29 October 2014 at 19:54:45 UTC, bearophile wrote: advibm: I would like to have something like that: char[] buf; // already filled array char[] partOfBuf = betweenTwoStrings(buf, START, END); partOfBuf[0] = 'a'; // THIS should also change the 'buf' variable assert(buf[0] == 'a'); Thanks for your help To do this you don't need to return a ref slice. A slice suffices. But D strings/wstrings/dstrings are made of immutable chars, so you can't modify them. So you need to work with char[] or dchar[] or wchar[]. Bye, bearophile Thank you for your fast answer. I am embarrased but my code already works as expected. I made a mistake when I wanted to change the partOfBuf variable. I wrote: partOfBuf = replacedArray; But I had to write partOfBuf[0..$] = replacedArray.