possible improvement to if statements?
Steven Schveighoffer
schveiguy at gmail.com
Sun Apr 26 20:41:47 UTC 2020
We have this pattern in D, which is pretty nice:
if(auto p = x in y)
{
// use p which is a pointer
}
But pointers can be difficult to use -- you sometimes have to
dereference them to use them, and you can't create a reference variable
in-line.
What about something like:
if(ref p = ptrExpression)
{
}
The expression would be a pointer expression. p would be bound to the
pointer target, but the if statement is on the pointer itself. That is,
you get inside only if p is referring to something not null.
I realize this is not going to fly, because there are too many holes.
But I've wished for something like this a few times.
You can ALMOST get there with a kooky foreach helper (foreach is one of
the few places where a ref local can be added into a function scope):
struct RefOf(T)
{
T* ptr;
ref T front() { return *ptr; }
bool empty() { return ptr is null; }
void popFront() { ptr = null; }
}
RefOf!T refof(T)(T * ptr) { return RefOf!T(ptr); }
foreach(ref r; (x in y).refof)
{
}
but you can't do `else` with it. You can wrap it in an if like this:
if(auto p = x in y) foreach(ref r; p.refof) {
// ugh...
}
else
{
}
Does anyone have a workable way this kind of thing could be added to D?
-Steve
More information about the Digitalmars-d
mailing list