Consider the following code, which results in 3
being printed:
x = 3
begin
local x
x = 4
end
println(x)
In the documentation about Scope of Variables it says “the begin
construct does not introduce a new scope”, and removing the local x
line in the above code makes it behave exactly according to this. However, the begin block seems to introduce some kind of “invisible scope” that is turned into a kind of local scope if the local
keyword is used.
Further investigating this:
begin
x = 3
begin
local x
x = 4 # modifies x from outer begin-block
y = -1 # global variable y
end
println(x)
end
println(y)
leads to 4
and -1
being printed, so the scope introduced seems to default to the outer-most begin, and only apply to variables explicitly declared as local. Would it be correct to conclude begin
(and similarly if
) introduces a kind of “fall-through” scope (rather than no scope) that is ignored unless explicitly used?
I have a hard time understanding this behavior rigorously and can’t find any answers to this (arguably not very important question) online. Thanks in advance for any ideas about this!
For reference: I am using Julia 1.0 and refer to the corresponding documentation, but I suspect this to be similar in previous versions.