Unable to access a variable declared inside an if statement (Error: is shadowing variable)
BoQsc
vaidas.boqsc at gmail.com
Wed May 27 11:47:33 UTC 2020
On Wednesday, 27 May 2020 at 11:13:09 UTC, Simen Kjærås wrote:
> On Wednesday, 27 May 2020 at 11:03:51 UTC, BoQsc wrote:
>> I'm lacking knowledge on how to achieve what I want and
>> getting an error.
>> What is the correct way to do what I tried to achieve in this
>> code?
>> Everything was intuitive until I started to add notice
>> variable to the writeln. Rdmd says variable `notice` is
>> shadowing variable.
>>
>>> if (driveLetter.exists){
>>> auto directory = "/Backup";
>>> if ((driveLetter ~ directory).exists){
>>> auto notice = "Backup directory exists.";
>>>
>>> }
>>> writeln(driveLetter, notice);
>>> }
>
> Variables only live in a specified scope, starting from where
> they are declared, and ending when they reach the '}'
> indicating the end of said scope.
>
> In you case, 'notice' only lives inside the if ((driveLetter ~
> directory).exists) scope, and doesn't exist outside. In order
> to fix this, you will need to declare it outside:
>
> if (driveLetter.exists) {
> auto directory = "/Backup";
> auto notice = "Backup directory does not exist.";
> if ((driveLetter ~ directory).exists) {
> notice = "Backup directory exists.";
> }
> writeln(driveLetter, notice);
> }
>
> This also makes it clearer what value 'notice' will have when
> the backup directory doesn't exist - in your case you haven't
> assigned it any value in that case.
>
> --
> Simen
That's correct. Thanks Simen.
> import std.stdio : writeln;
> import std.file;
> void main(){
>
> auto drivesLetters = [
> "A:", "I:", "Q:", "Y:",
> "B:", "J:", "R:", "Z:",
> "C:", "K:", "S:", "D:", "L:", "T:",
> "E:", "M:", "U:",
> "F:", "N:", "V:",
> "G:", "O:", "W:",
> "H:", "P:", "X:",
> ];
>
> foreach (string driveLetter; drivesLetters) {
> if (driveLetter.exists) {
> auto notice = "";
> if ((driveLetter ~ "/Boot").exists) {
> notice ~= "\\Boot directory exists";
> notice ~= " ";
> }
> if ((driveLetter ~ "/Windows").exists) {
> notice ~= "\\Windows folder exists";
> notice ~= " ";
> }
> writeln(driveLetter, notice);
> }
>
> }
>
>
> }
More information about the Digitalmars-d-learn
mailing list