Neat trick - 'with' and unnamed objects + 'with' proposals

Max Samukha samukha at voliacable.com
Tue Apr 24 10:35:07 PDT 2007


On Tue, 24 Apr 2007 20:18:24 +0300, Max Samukha
<samukha at voliacable.com> wrote:

>On Wed, 25 Apr 2007 01:53:56 +0900, Bill Baxter
><dnewsgroup at billbaxter.com> wrote:
>
>>BCS wrote:
>>> Bill Baxter wrote:
>>>> BCS wrote:
>>>>
>>>>> Bill Baxter wrote:
>>>>
>>>>
>>>>> how about take a trick from "if"
>>>>>
>>>>> with(auto name = new someGUIWidget(myParent))
>>>>> {
>>>>>    shown = true;
>>>>>    focusable = false;
>>>>>    some_global_function(name);
>>>>> }
>>>>
>>>>
>>>> Yeh, I was actually just thinking that myself, and was disappointed to 
>>>> find out it doesn't work.  :-(
>>>>
>>>> Looking at the spec it seems that's special to 'if'.   It could be 
>>>> useful for switch(), with() and synchronized(), but it seems it hasn't 
>>>> been added.
>>>>
>>>> --bb
>>> 
>>> Ohhh. That would be nice in switch ... and while...
>>
>>I was thinking 'while' would have issues, because the condition is 
>>evaluated multiple times.  So I left it off the list.  Maybe it's not a 
>>problem though.  Just make it equiv to
>>{
>>    typeof(condition()) x;
>>    while(x = condition()) {
>>        // do stuff
>>    }
>>}
>>
>>--bb
>
>This would be inconsistent with if(), which declares the variable to
>be local to if's scope. BTW, it'd be nice to have the variable
>declared outside the if block as you proposed for 'with'. I remember a
>case or two when I wanted that.
>
>
> 

BTW, there is a bug

void main(char[][] f)
{
    int x = 1;

    if (auto x = 2)
    {
        writefln(x);
    }

    writefln(x);
}

x in if() shadows the outer x and it shouldn't according to the specs
   



More information about the Digitalmars-d mailing list