Hum, this is not exactly the case. I tried this code:
*Input 1:*
workspace()
function foo()
f = () -> i
i = 1
f()
end
foo()
*Output 1:*
1
*Input 2:*
workspace()
function foo()
f = () -> begin
global i
return i
end
i = 1
f()
end
foo()
*Output 2:*
i not defined.
Even the real implementation is some version similar to what you said, I
would also like to know how does the compiler treat it exactly.
In C++, for example, with forward declaration, it can *compile*, but it
won't *links*.
In other words,, during the compilation of Julia, the address of the
variable "i" is already fixed, or it will look for the real "i" in the
run-time again?
On Wednesday, March 11, 2015 at 11:35:07 AM UTC+1, Yuuki Soho wrote:
>
> I think Julia implicitly assume that i is a global variable, i.e. your
> function is equivalent to
>
> f = () -> begin
> global i
> return i
> end
>
> So it compiles but throws an error at run-time if i is not defined in the
> global scope.
>