lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


On 17 February 2010 00:25, Kelley, Brian <bkelley@qualcomm.com> wrote:
>
> On Feb 16, 2010, at 3:40 PM, Matthew Wild wrote:
>
>> On 16 February 2010 22:24, Kelley, Brian <bkelley@qualcomm.com> wrote:
>>>
>>> On Feb 16, 2010, at 1:44 PM, Florian Weimer wrote:
>>>
>>> Make it:
>>>
>>>  repeat
>>>    local t = 0
>>>    if cond then continue end
>>>    local t = 1
>>>    ...
>>>  until t == 0
>>>
>>> Then the two t are actually different variables (in the current
>>> implementation), and it's not clear to which incarnation the
>>> comparison refers.
>>>
>>> Why is it not clear?  Would it be clearer without the continue statement?
>>> The continue statement does not impact the *scope* of variables.  Scoping is
>>> lexical -- as written.  Continue is just a restricted 'goto'.
>>
>> If it's so clear, what is the behaviour of the code above?
>
> Assuming "variables default to nil", when 'cond' is true and the continue is taken, "t==0" will evaluate to false because 't' will be nil.
>
> I'm not sure what is throwing you off.  Each "local t" declares a new variable.  Here is an illustration of that:
>

Right, but the "local t" that declares the t used in the loop
condition was never hit.

> local t
> local function get() return t end
> local t
> local function set(a) t = a end
> set(2)
> print(get())  -->  nil
>

I don't find this confusing at all, it's perfectly logical. But
jumping over local statements and then having the variable magically
exist is logically wrong :)

Matthew