braceless with statements

Steven Schveighoffer schveiguy at gmail.com
Fri Nov 12 15:33:38 UTC 2021


On 11/12/21 10:03 AM, Ogi wrote:
> On Friday, 12 November 2021 at 10:55:21 UTC, Stefan Koch wrote:
>> Good Morning Everyone,
>>
>> I recently found myself wanting to introduce a bunch of member 
>> variables into the scope of the function I was currently working on.
>> Of course D has a nice way to do that; The `with` statement.
>>
>> so
>> ```D
>> struct S { int x; }
>> int fn()
>> {
>>     S s;
>>     with(s)
>>     {
>>        x = 12;
>>        return x;
>>     }
>> }
>> ```
>>
>> this code works but it forces another level of indentation which makes 
>> it a little ugly.
>>
>> So I did a small patch to my local version of dmd.
>> And now this works:
>> ```D
>> struct S { int x; }
>> int fn()
>> {
>>     S s;
>>     with(s):
>>     x = 12;
>>     return x;
>> }
>> ```
>>
>> It is a really simple patch and I think it's worthwhile to have this 
>> in the main language.
> 
> I’m missing the point. Why using a struct to add some variables? At 
> first I thought that you want to shadow already existing variables but 
> this is prohibited in D and thank God for that.

No, you are wanting to use the members of `s` many times, and don't want 
to have to repeat `s.` all the time. This isn't a great example because 
of the brevity. But imagine a long expression instead of the 
single-letter variable.

`with` already works as noted in the first case, the second case would 
just be a way to write the same thing but without braces (and indentation).

-Steve


More information about the Digitalmars-d mailing list