On Wednesday, 9 January 2013 at 21:17:01 UTC, comco wrote:
On Wednesday, 9 January 2013 at 20:36:16 UTC, Benjamin Thaut wrote:
After some refactoring I had a series of bugs that came from renaming class members so that the following situation was present.


class foo
{
 float a;

 void doSomething()
 {
   float a;
   a = a * 2.0;
 }
}

The local variable a shadows the member a after the refactoring and therefore this code will no longer work as expected. This was quite time consuming to track down. So I wanted to ask if we want to prevent that with a warning or even an error? D does not allow shadowing of local variables, so why is it allowed for members?

Kind Regards
Benjamin Thaut

I don't think an error will be appropriate, because this a can be a protected member of the super-super-super class and it won't be nice to be forced to use a different name. But another view on this is that it behaves consistently with the case in which a function parameter shadows a member.
I won't like this code:
class Pu {
   int a, b;
   this(int a, int b) {
       this.a = a;
       this.b = b;
   }
}

to issue warnings for a and b.

If you use this, then naturally a warning would be ridiculous.

However this should produce a warning:
a = a;
b = b;

Reply via email to