[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: _ENV and chunks
- From: Philipp Janda <siffiejoe@...>
- Date: Mon, 02 Jun 2014 04:04:47 +0200
Am 02.06.2014 03:10 schröbte Robert Virding:
Reading through the manual I have understood that:
- _ENV is an upvalue to a chunk and not an argument to the chunk function
- It is the only upvalue to the chunk
If you obtained the chunk by parsing Lua source code, then yes.
Am I correct here? There is a slightly cryptic section in the documentation
of load which has me puzzled:
"If the resulting function has upvalues, the first upvalue is set to the
value of the global environment or to env, if that parameter is given. When
loading main chunks, the first upvalue will be the _ENV variable (see §2.2
)."
You can compile a Lua function with an arbitrary number of upvalues to
byte code using `string.dump` and later load it again. The number (but
not the values/references) of the upvalues are stored in the byte code.
When loaded, the function gets its original number of upvalues (all set
to nil). If the loaded function has more than zero upvalues and you
passed an env argument to `load`, the first upvalue will be set to that
argument. If you didn't pass an env argument, the first upvalue will be
set to the globals table iff the loaded function has exactly one upvalue.
I am assuming that the resulting function is the chunk function.
Yes.
Robert
Philipp