Mixin - to get to the content-type `MapResult!(__lambda1, int[]).MapResult`
Dennis Ritchie via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sat May 30 23:04:39 PDT 2015
On Saturday, 30 May 2015 at 23:58:44 UTC, Ali Çehreli wrote:
> On 05/30/2015 12:19 PM, Dennis Ritchie wrote:
>
> First, unfortunately, I don't understand you completely. Sorry
> about that... :)
Nothing to worry about! Now you will understand me till the
end... :)
> Regarding that, the intermediate range.front is already
> available right before the .walk part. You can do anything at
> that point. There was some proposals about a 'tap' algorithm
> that could be used for debugging purposes. Here is a quick
> implementation:
Yes, it is an intermediate stage of code that will help me to
explain what I want to get.
> import std.stdio, std.algorithm;
>
> static int idx;
>
> void walk(R)(R range) {
> while (!range.empty) {
> range.front;
> range.popFront;
> }
> }
>
> struct Tap(alias func, R)
> {
> R range;
>
> alias range this;
>
> @property auto front()
> {
func(range.front); // It's a necessary part of the
code! :)
> return range.front;
> }
> }
>
> auto tap(alias func, R)(R range)
> {
> return Tap!(func, R)(range);
> }
>
> void main() {
> [5, 6, 7]
> .map!(a => [idx++, a])
> .tap!((a) { writeln(a[1..$]); }) /* <-- This can use
> the
> * lambda syntax as
> well but
> * note that the
> return
> * value of the
> lambda is
> * ignored. So I
> think this
> * syntax is more
> * helpful. */
> .walk;
> }
>
> Ali
I don't know, maybe it's something out of science fiction, but
here's what I want to do :)
struct Tap(alias func, R)
{
R range;
alias range this;
@property auto front()
{
immutable string myStr = `func(mixin("range.front"));`;
immutable string newStr = `mixin(myStr);`;
writeln(newStr); // I want them to be printed here
`writeln([5]);`
mixin(newStr[0 .. $ - 4] ~ `[idx,` ~ newStr[$ - 4 .. $]);
// I want them to be printed here `[0, 5];`
return range.front;
}
}
Is it possible to do using mixins or through any other means? Ie
I want to catch the moment when `func` is replaced by the
invocation of `writeln` :)
More information about the Digitalmars-d-learn
mailing list