[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: local-by-default revisited
- From: Reuben Thomas <rrt@...>
- Date: Thu, 27 Sep 2001 15:42:40 +0100
What follows is another "local by default" proposal. IMO it's simpler,
less obtrusive and yet gives better results than other proposals. It's
intended for Lua 4.1.
The changes are:
1. Add a new keyword "outer" which works like "local", except that it
declares the given name to refer to the innermost variable of the
same name in an enclosing function or, if there is none, to a
global of the same name (even if none currently exists).
2. The first assignment to a variable in a function implicitly acts as
a "local" declaration unless it has already been declared in that
function, explicitly or implicitly. Assignment outside a function
works as at present, as does assignment to table elements.
a. The ability to do configuration file style global assignment is
retained, at the cost of making assignment inside functions work
differently from outside. In practice this shouldn't be a problem,
as few Lua scripts contain complex code at the top level. If you
need local variables in top-level code, you must simply declare
them as at present.
b. The only change to the syntax is the addition of "outer".
c. The only semantic change is to the meaning of assignment within
d. Assignments only make the variable local where they occur, rather
than for the whole function. This agrees with the principle of
least surprise: you don't have to read an entire function to find
out whether a given variable is local (and nor does the compiler,
so the implementation is simple).
[I've put this on the Wiki too as LocalByDefault under
http://sc3d.org/rrt/ | competent, a. underpromoted