On Friday, 4 November 2016 at 14:10:51 UTC, Steven Schveighoffer
wrote:
On 11/3/16 6:29 PM, Jerry wrote:
So I was thinking of a way of extending if statements that have
declarations. The following being as example of the current
use of if
statements with declarations:
if(int* weDontPollute = someFunc())
{
// use weDontPollute
}
That's great and all, but it only works by checking if the
variable
evaluates to true or false. Which is fine for a pointer but
otherwise
useless for anything else, like integers where zero is usually
valid
input (index for array). So currently the only way to do
something like
this in the language, that i've found, is to use a for
statement.
for(int i = someFunc(); i >= 0;)
{
// use i
break;
}
Not that ideal to use a for statement. It makes it hard to
read and if
the break condition isn't there it might very well be an
infinite loop.
So I was thinking of some sort of syntax like this:
if(int i = someFunc(); i >= 0)
{
// use i
}
Thoughts on this sort of feature?
Hm... what about something like:
struct BoolCond(T, string cond)
{
T val;
bool opCast(B)() if(is(B == bool))
{
return mixin("val " ~ cond);
}
}
auto boolcond(string cond, T)(T val)
{
return BoolCond!(T, cond)(val);
}
if(auto i = someFunc.boolcond!(">= 0"))
{
... // use i
}
-Steve
Well that's just a basic case, what if you want more than one
condition. Using "&&" for example, or a condition along with
another value that's in the scope.
void otherFunc(int input)
{
if(auto i = someFunc.boolcond!(">= input")) // --- error
{
... // use i
}
}
Then you need another work around for something like this:
if(int value; auto i = someFunc(&value))
{
// ...
}