lua-users home
lua-l archive

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

your example is wrong.
You've tested only the "function name()" case that does not hides any "name" variable in scope.
I'm sure that:
  c=1; do function c() end; end print(c)
  --> 1
  c=1; do c=function() end; end print(c)
  --> function: 0xnnnn
are NOT equivalent.
- the first one (function c() end) declares a new local variable "c" in all cases,
- the second one (c = function() end) does NOT declare a new local variable but overwites the value of the existing variable "c" in scope.

Le lun. 19 nov. 2018 à 13:07, Francisco Olarte <> a écrit :
On Sun, Nov 18, 2018 at 8:03 PM Philippe Verdy <> wrote:
> So "function f(x)... end" is not completely equivalent to "f= function(x) ... end": the first one declares a new local variable named "f", the second overwrites an existing variable "f" in scope, or creates a new local variable.

Are you sure? The manual ( ) says it's
completely equivalent and a simple test:

Lua 5.3.3  Copyright (C) 1994-2016, PUC-Rio
> a=1;function tst() local b; function a() end; function b() end; function c() end; print('a',a,'b',b,'c',c,'Z'); end; print('a',a,'b',b,'c',c,'Z'); tst(); print('a',a,'b',b,'c',c,'Z');
a    1    b    nil    c    nil    Z
a    function: 0x9da150    b    function: 0x9da0c8    c    function:
0x9bfdb8    Z
a    function: 0x9da150    b    nil    c    function: 0x9bfdb8    Z
Seems to contradict your "or creates a local variable" ( c is alive
after tst(), so it should be global )

Francisco Olarte.