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

Max Samukha samukha at voliacable.com
Tue Apr 24 11:56:33 PDT 2007


On Wed, 25 Apr 2007 02:38:26 +0900, Bill Baxter
<dnewsgroup at billbaxter.com> wrote:

>Max Samukha wrote:
>> 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
>
>You mean it should be an error according to the specs, right?
>--bb

Yes



More information about the Digitalmars-d mailing list