zsh-workers
 help / color / mirror / code / Atom feed
From: Mikael Magnusson <mikachu@gmail.com>
To: Bart Schaefer <schaefer@brasslantern.com>
Cc: Marlon Richert <marlon.richert@gmail.com>,
	Zsh hackers list <zsh-workers@zsh.org>
Subject: Re: [BUG] zsh/param/private scoping error
Date: Wed, 1 Sep 2021 18:03:01 +0200	[thread overview]
Message-ID: <CAHYJk3QpW5S22BEbVm9KX05_orkfK8pAw2QeMprVys0gN=pZYg@mail.gmail.com> (raw)
In-Reply-To: <CAH+w=7agEjSXRYBuKyVsCM+HUqCX4-y975wfKe7bDgH+OLs3vA@mail.gmail.com>

On 9/1/21, Bart Schaefer <schaefer@brasslantern.com> wrote:
> On Wed, Sep 1, 2021 at 4:51 AM Marlon Richert <marlon.richert@gmail.com>
> wrote:
>>
>> % () { private tst; () { tst= } }
>> (anon):1: tst: attempt to assign private in nested scope
>> %
>>
>> This is not how one would expect private variables to behave.
>
> But it's how variable scoping behaves in the shell language.  If I do
>
> % () { local tst; () { tst=foo } }
>
> Then it is the tst in the surrounding scope that gets altered, not the
> global one.  If the inner function is INTENDED to create a global, it
> should be using "typeset -g" explicitly.

This seems weird to me, since private is stated to be "used to create
parameters whose scope is limited to the current function body, and
not to other functions called  by  the current function." If the
private parameter is not in scope, then any called functions should
behave as if it is not in scope, ie automatically create a parameter
scoped to whatever level is above the one that has the private.
(technically speaking, this is probably hard). If private parameters
are only compatible with code that runs without warnings under setopt
WARN_CREATE_GLOBAL, then we should document this.

-- 
Mikael Magnusson


  reply	other threads:[~2021-09-01 16:03 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-01 11:49 Marlon Richert
2021-09-01 14:09 ` Daniel Shahaf
2021-09-01 16:21   ` Marlon Richert
2021-09-01 14:39 ` Bart Schaefer
2021-09-01 16:03   ` Mikael Magnusson [this message]
2021-09-01 16:11     ` Marlon Richert
2021-09-01 17:00       ` Mikael Magnusson
2021-09-01 17:35         ` Bart Schaefer
2021-10-03 21:55           ` Bart Schaefer
2021-10-04  4:54             ` Mikael Magnusson
2021-10-04 15:12               ` Bart Schaefer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAHYJk3QpW5S22BEbVm9KX05_orkfK8pAw2QeMprVys0gN=pZYg@mail.gmail.com' \
    --to=mikachu@gmail.com \
    --cc=marlon.richert@gmail.com \
    --cc=schaefer@brasslantern.com \
    --cc=zsh-workers@zsh.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).