lua-users home
lua-l archive

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


It is defined. It just isn't deterministically defined. And leaving flexibility in the language definition can be a key part of how one allows for optimization. It might be nice to catch these cases at compile time and issue warnings or errors, but one would then need to disallow things like:

{ 10, 20, nil, 40, [ f() ] = "surprise!" }

If f returns any of 1, 2, 3, or 4 the results depend on how the constructor is processed and you probably just don't want to write code like this.

Mark

On Apr 21, 2012, at 10:58 AM, Robert Virding <robert.virding@erlang-solutions.com> wrote:

> I personally think that having things undefined, implementation specific, and still not illegal is a Bad Thing (tm). It is too easy to write something which works and then make a small innocuous change and suddenly it no longer works. Or worse, it "works" but produces the wrong answer which in the worst case you don't see is the wrong answer. Unfortunately those who are hit hardest are those with the least chance of understanding what is wrong and what to do about it: the inexperienced. Telling them that they shouldn't do that is not really helpful.
> 
> No, it is worth converting undefined to error generating illegal.
> 
> Robert
> 
> ----- Original Message -----
>> On 21 April 2012 14:36, Petite Abeille <petite.abeille@gmail.com>
>> wrote:
>>> 
>>> On Apr 20, 2012, at 9:20 AM, Dirk Laurie wrote:
>>> 
>>>> I think you have discovered a bug.  §3.4.8 of the manual states
>>>> clearly,
>>>> by way of an example, that a table constructor is equivalent to
>>>> assignment
>>>> of the entries from left to right.
>>> 
>>> <joke>
>>> Patient: Doctor, doctor, it hurts when I do this.
>>> Doctor: So don't do that.
>>> </joke>
>>> 
>>> Trivia 1: What's the value of 'a'?
>>> 
>>> local a, a = 1, 2
>>> 
>>> print( a )
>>> 
>> Undefined, yet really implementation specific
>> 
>>> Trivia 2: What's the value of 'a'?
>>> 
>>> local a
>>> 
>>> a, a = 1, 2
>>> print( a )
>>> 
>>> 
>> Undefined, yet really implementation specific
>> 
>> Liam
>> 
>> 
>