Le mercredi 24 décembre 2014 à 10:21 -0800, [email protected] a
écrit :
> Hi all,
> 
> Near the top of the variables and scoping chapter of the
> documentation, there's a list which is kicked off by, "These
> constructs which introduce new variables into the current scope are as
> follows:"). How could this be worded to express things the other way
> round --- that is, "When assigning to a variable, you *usually* create
> a new local; the only times you don't are when: ..."?
The wording has recently been changed in the development version of the
manual. See:
http://docs.julialang.org/en/latest/manual/variables-and-scoping/

If you can come up with a better wording, please submit a pull request.
You can do that easily by clicking on Edit on GitHub in the top-right
corner of the web page. Thanks!

> My understanding thus far is: when assigning to a variable, the only
> times you *don't* create a new local is when you're assigning to an
> already existing outer local or outer global. Is that the case?
I'd say that's right, but I may well be missing a special-case.

> Finally then, if that's the case, what is going on here:
> 
> ~~~julia
> #!/usr/bin/julia
> 
> n = 1  # top-level variable, aka global
> 
> while n <= 3
>     println(n)
>     # Wait. We're assigning here within the `while` scope... Though it would
>     # be weird, shouldn't that make a new local `n` since we don't have 
> `global n`
>     # written anywhere in this scope?
No, `global n` is only needed when `n` is in the global scope. Here `n`
is not global, it's local to the enclosing scope. The manual says:

An assignment x = y introduces a new local variable x only if x is
neither declared global nor introduced as local by any enclosing scope
before or after the current line of code.

In the present case, `n` is introduced by the enclosing scope, so
`global` is not needed.

Again, if you can improve the manual, feel free to make suggestions. It
looks like the meaning of "global" could use some more explicit
definition.


Regards

>     n = n + 1
> end
> 
> # prints 1 2 3
> 
> println("done, and now n = ", n)  # prints 4
> ~~~
> 
> Thanks,
> -- John
> 
> 

Reply via email to