Is it possible to use templates to implement something like the `@show` macro from the Julia programming langauge in D?
Paul Backus
snarwin at gmail.com
Mon Sep 9 00:34:03 UTC 2024
On Sunday, 8 September 2024 at 22:01:10 UTC, WraithGlade wrote:
> Basically, I want there to be a way to print both an expression
> and its value but to only have to write the expression once
> (which also aids refactoring). Such a feature is extremely
> useful for faster print-based debugging.
>
> Thus, instead of having to write something like this:
>
> ```
> writeln("1 + 2 == ", 1 + 2);
> ```
>
> I want to just be able to write this:
>
> ```
> show!(1 + 2)
> ```
The only way to write a macro in D that executes code in the
scope where the macro is *invoked* (rather than the scope where
it's *defined*) is to use a `mixin`:
```d
enum show(string expr) = `writeln(q"(` ~ expr ~ `)", " == ", ` ~
expr ~ `);`;
void main()
{
import std.stdio;
mixin(show!"1 + 2"); // 1 + 2 == 3
const int x = 1 + 2;
mixin(show!"x"); // x == 3
}
```
More information about the Digitalmars-d-learn
mailing list