Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Obtaining the names of all local variables



On Jun 27, 11:45pm, Oliver Kiddle wrote:
} Subject: Re: Obtaining the names of all local variables
}
} Bart wrote:
} > This got me thinking, wouldn't it be helpful if zsh/parameter had an array
} > $locals that holds the names of all the local parameters?  Then you could
} > 
} >     needs_private_scope() { local -h $locals; ... }
} 
} I'm not sure I understand how that would achieve a private scope.

A few weeks ago someone asked for what amounts to lexical scoping of
local variables instead of dynamic scoping.  There's no way to achieve
that completely, but if you can hide all the variables that your
caller has made local, you get at least part of the way; you are then
guaranteed not to accidentally poke something into the caller's scope.

} -h is only applicable to special parameters.

Right, but if $locals contains a mix of non-special and special, you
(might) need the -h there.  The real point is to make the non-specials
local as well, which this ...

}   local -h ${(k)parameters[(R)*-special]}

... does not do, and besides that also makes the global specials local,
which is NOT the point.

} Or you could mark every parameter local.

That also hides the globals, which again is not the desired effect.

If there were a version of "typeset -g" that meant "expose the listed
top-level global variables, regardless of intervening dynamic scopes"
that would actually be a better starting point, but I think that's a
lot more difficult to achieve.  Maybe I'm wrong.



Messages sorted by: Reverse Date, Date, Thread, Author