I have a use case I found interesting. I guess it's well known to some of 
you, but I never noticed it in the documentation and I find it 
counterintuitive, both as an experienced programmer and with respect to the 
typical scope rules of variables in Julia.

I accidentally nested a loop within another loop using the same index 
variable for both loops. First of all, there are reasons sometimes you'd 
want to do this but I did it by accident as a typo. But the scope rules of 
variables for Julia, as applied to functions, state that you can read a 
variable value at a lower level in the hierarchy but you cannot write to it 
so I actually assumed that this also applied to loops (*first mistake*).

Secondly, as you'll see if you execute the simplified example of what I 
actually did here:
for i = 1:5
  for j = 1:5
    for i = 1:3
      print("tick ");
    end
  print(" $i\n");
  end
print(" $j $i\n");

Julia still knew to only run the outer loop 5 times, despite the fact that 
I was setting the variable bound to $i at level 2 to the value 3 at level 3 
in the nested hierarchy of loops. I suspect that I can see what's happening 
at the compiler/interpretter level, but I do think that this is confusing.

We seem to have the worst of both worlds here in that we can access and 
change $i at an inner loop level and have the change be persistent, but yet 
we cannot change the behaviour of the outer loop (as would be the case in 
C).

What do you guys think? Can this be clarified in the documentation, or 
should the actual behaviour of julia be modified?

David.

Reply via email to