Properties: a.b.c = 3
Ary Borenszweig
ary at esperanto.org.ar
Wed Jul 29 12:00:42 PDT 2009
Steven Schveighoffer Wrote:
> On Wed, 29 Jul 2009 14:50:42 -0400, Ary Borenszweig <ary at esperanto.org.ar>
> wrote:
>
> > Steven Schveighoffer wrote:
> >> On Wed, 29 Jul 2009 14:39:07 -0400, Ary Borenszweig
> >> <ary at esperanto.org.ar> wrote:
> >>
> >>> a.b.c = d;
> >>>
> >>> If b is anything that has a struct type, and c is anything else, the
> >>> statement must report an error.
> >> struct S
> >> {
> >> int *x;
> >> void c(int n) {*x = n;}
> >> }
> >> struct S2
> >> {
> >> int n;
> >> S b() { return S(&n);}
> >> }
> >> void main()
> >> {
> >> S2 a;
> >> a.b.c = 5;
> >> }
> >> Why should this not be allowed?
> >
> > Because in the general case it might not work.
> >
> > It's simple: if you disallow it, no bugs caused because of this can
> > exist. If you don't disallow it, sometimes it might work, sometimes it
> > won't work. Which option do you prefer as a programmer?
>
> I prefer to have the power to create whatever I want without the compiler
> telling me incorrectly that it won't work.
>
> why allow any programming at all? The programmer might write incorrect
> code!
>
> -Steve
I reply using the web page because Thunderbird gives me a Bad Request error (very strange).
The cases where you do:
a.b.c = 3;
where b is a struct are probably few, and most of the time they lead to incorrect result, such as the Widget and Rectangle examples, and many others. So I prefer the compiler to tell me "Look, b is a struct, please make sure you know what you are doing". And I can tell you, most of the time you'll say "Thanks, compiler, I didn't notice that!". If the compiler is wrong, you just do:
auto x = a.b;
b.c = 3;
and that's it. No big deal.
More information about the Digitalmars-d
mailing list