If you keep reading from the link you gave: The variable relation is declared inside the if block, but used outside. However, when depending on this behavior, make sure all possible code paths define a value for the variable. The following change to the above function results in a runtime error
julia> function test(x,y) if x < y relation = "less than" elseif x == y relation = "equal to" end println("x is ", relation, " y.") endtest (generic function with 1 method) julia> test(1,2)x is less than y. julia> test(2,1)ERROR: UndefVarError: relation not defined in test at none:7 You will see that when i==2 you won't define x and therefore you will get the runtime error. On Monday, February 8, 2016 at 5:41:40 AM UTC-6, David van Leeuwen wrote: > > Hello, > > According to > http://docs.julialang.org/en/release-0.4/manual/control-flow/#man-conditional-evaluation > variables > in if blocks do not introduce lexical scope, and hence are available > afterwards. This makes sense and is what I need. > > However, it seems afterwards relates to position in the encapsulating > block, and not to execution time. > > function testif() > for i in 1:2 > if i==1 > x = 0 > end > if x==2 > println(x) > end > end > end > > > This code gives me an undefined `x` in the print statement, where I would > have expected `x` to be initialized in the first iteration. It seems I > need to define `x` outside the for loop, even though I don't need it there. > > > Is this interpretation in Julia intentional? > > Cheers, > > ---david > >