Thread overview |
---|
September 23, 2014 with (auto p = new ...) | ||||
---|---|---|---|---|
| ||||
Hi, I just wonder why "with (auto p = new ...)" is not working. It would be some syntax sugar in this scenario: with (auto p = new Panel()) { parent = this; text = "bla"; with (auto b = new Button()) { parent = p; // Here p is needed text = "bla2"; } } source\app.d(8): Error: expression expected, not 'auto' source\app.d(8): Error: found 'p' when expecting ')' source\app.d(8): Error: found '=' instead of statement ... Kind regards André |
September 23, 2014 Re: with (auto p = new ...) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andre | On Tuesday, 23 September 2014 at 15:19:59 UTC, Andre wrote:
> I just wonder why "with (auto p = new ...)" is not working.
> It would be some syntax sugar in this scenario:
I presume with is limited to expressions and not statements as the messages says.
However, you can use
if (auto p = new Panel())
instead as long as the new doesn't fail, that is you still have memory left :)
|
September 23, 2014 Re: with (auto p = new ...) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andre | How about:
auto b - new Button(); with (b) {
On Tuesday, 23 September 2014 at 15:19:59 UTC, Andre wrote:
> Hi,
>
> I just wonder why "with (auto p = new ...)" is not working.
> It would be some syntax sugar in this scenario:
>
> with (auto p = new Panel())
> {
> parent = this;
> text = "bla";
> with (auto b = new Button())
> {
> parent = p; // Here p is needed
> text = "bla2";
> }
> }
>
> source\app.d(8): Error: expression expected, not 'auto'
> source\app.d(8): Error: found 'p' when expecting ')'
> source\app.d(8): Error: found '=' instead of statement
> ...
>
> Kind regards
> André
|
September 23, 2014 Re: with (auto p = new ...) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Graham Fawcett | Sorry, I sent that last message before I intended to.
How about:
auto b = new Button(); with (b) {
...
}
'b' is explicitly outside of the scope of the 'with' block, which may not be what you intended. But you could use more braces to add an extra level of scope if that's an issue:
...
text = "blah";
{
auto b = new Button(); with (b) {
...
}
}
// b is no longer in scope
Graham
> On Tuesday, 23 September 2014 at 15:19:59 UTC, Andre wrote:
>> Hi,
>>
>> I just wonder why "with (auto p = new ...)" is not working.
>> It would be some syntax sugar in this scenario:
>>
>> with (auto p = new Panel())
>> {
>> parent = this;
>> text = "bla";
>> with (auto b = new Button())
>> {
>> parent = p; // Here p is needed
>> text = "bla2";
>> }
>> }
>>
>> source\app.d(8): Error: expression expected, not 'auto'
>> source\app.d(8): Error: found 'p' when expecting ')'
>> source\app.d(8): Error: found '=' instead of statement
>> ...
>>
>> Kind regards
>> André
|
September 23, 2014 Re: with (auto p = new ...) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Graham Fawcett | Yes, that is also working. As far as I remember (only my tablet currently available) also this works:
Panel p;
with(p = new Panel ()) {}
Therefore it seems strange,the same does not work with auto.
Kind regards
André
On Tuesday, 23 September 2014 at 19:49:22 UTC, Graham Fawcett wrote:
> Sorry, I sent that last message before I intended to.
>
> How about:
>
> auto b = new Button(); with (b) {
> ...
> }
>
> 'b' is explicitly outside of the scope of the 'with' block, which may not be what you intended. But you could use more braces to add an extra level of scope if that's an issue:
>
> ...
> text = "blah";
> {
> auto b = new Button(); with (b) {
> ...
> }
> }
> // b is no longer in scope
>
> Graham
>
>
>
>> On Tuesday, 23 September 2014 at 15:19:59 UTC, Andre wrote:
>>> Hi,
>>>
>>> I just wonder why "with (auto p = new ...)" is not working.
>>> It would be some syntax sugar in this scenario:
>>>
>>> with (auto p = new Panel())
>>> {
>>> parent = this;
>>> text = "bla";
>>> with (auto b = new Button())
>>> {
>>> parent = p; // Here p is needed
>>> text = "bla2";
>>> }
>>> }
>>>
>>> source\app.d(8): Error: expression expected, not 'auto'
>>> source\app.d(8): Error: found 'p' when expecting ')'
>>> source\app.d(8): Error: found '=' instead of statement
>>> ...
>>>
>>> Kind regards
>>> André
|
September 23, 2014 Re: with (auto p = new ...) | ||||
---|---|---|---|---|
| ||||
Posted in reply to andre | I think this is just a language oversight. It's allowed in if statements, and people have made a good case for allowing it for switch statements. It just hasn't been implemented. I made an attempt one evening to implement it for switch statements, but I'm not at all familiar with DMD, so I put it on the back burner for the time being. |
September 24, 2014 Re: with (auto p = new ...) | ||||
---|---|---|---|---|
| ||||
Posted in reply to andre | On Tuesday, 23 September 2014 at 20:16:29 UTC, andre wrote:
> Therefore it seems strange,the same does not work with auto.
Yes, it seem logical to me allow this also in with and switch.
|
September 24, 2014 Re: with (auto p = new ...) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nordlöw | Enhancement 13526 filed: https://issues.dlang.org/show_bug.cgi?id=13526 |
September 24, 2014 Re: with (auto p = new ...) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andre Attachments: | On Wed, 24 Sep 2014 14:39:25 +0000 Andre via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com> wrote: > Enhancement 13526 filed: https://issues.dlang.org/show_bug.cgi?id=13526 i wrote a quickhack-patch for this ER. as it's my first patch that goes outside parser it needs to be reviewed by someone who knows compiler internals. ah, and we need grammar fixes for it too, but it's completely out of my scope now. |
September 26, 2014 Re: with (auto p = new ...) | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andre | On Tuesday, 23 September 2014 at 15:19:59 UTC, Andre wrote:
> Hi,
>
> I just wonder why "with (auto p = new ...)" is not working.
> It would be some syntax sugar in this scenario:
>
> with (auto p = new Panel())
> {
> parent = this;
> text = "bla";
> with (auto b = new Button())
> {
> parent = p; // Here p is needed
> text = "bla2";
> }
> }
>
> source\app.d(8): Error: expression expected, not 'auto'
> source\app.d(8): Error: found 'p' when expecting ')'
> source\app.d(8): Error: found '=' instead of statement
> ...
>
> Kind regards
> André
have you tried this?
---
import std.stdio;
struct myStruct{
int c=299792458;
}
void main(){
with(new myStruct()){
writeln(c);
}
}
---
|
Copyright © 1999-2021 by the D Language Foundation