zsh-users
 help / color / mirror / code / Atom feed
From: Bart Schaefer <schaefer@brasslantern.com>
To: zsh-users@zsh.org
Subject: Re: easy calling of associative array?
Date: Sun, 1 Nov 2015 19:08:42 -0800	[thread overview]
Message-ID: <151101190842.ZM16752@torch.brasslantern.com> (raw)
In-Reply-To: <5636B333.8060300@eastlink.ca>

On Nov 1,  4:49pm, Ray Andrews wrote:
} Subject: Re: easy calling of associative array?
}
} On 11/01/2015 03:55 PM, ZyX wrote:
} >
} > There is ${(P)} for indirect referencing:
}
} I can't get it to work with associative arrays tho.

Yeah, it's a bit weird with associative arrays because everything is
passed by value.  ${(P)ref} is ${(vP)ref} and thus ${${(P)ref}[idx]}
doesn't get what you want, and ${(P)ref[idx]} is ${(P)${ref[idx]}}
which also isn't what you want.

So you have to get a little arcane:  ${(P)${:-${ref}[idx]}}.

- ${ref} is the name of the assocative array.

- ${ref}[idx] is therefore a string that has the same format as the
  array lookup you want to perform.

- ${:-${ref}[idx]} substitutes that string into a parameter expansion.

- ${(P)${:-${ref}[idx]}} then treats that substitution as another
  parameter expansion, and you end up where you wanted to be.

This is admittedly not ideal, but until we embark on a significant
rewrite of parameter expansion, we're stuck maneuvering values into
the right places at the right times.


  reply	other threads:[~2015-11-02  3:08 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-01 23:12 Ray Andrews
2015-11-01 23:55 ` ZyX
2015-11-02  0:49   ` Ray Andrews
2015-11-02  3:08     ` Bart Schaefer [this message]
2015-11-02  3:33       ` Ray Andrews
2015-11-02  6:51         ` Bart Schaefer
2015-11-02 15:43           ` Ray Andrews
2015-11-02 16:28             ` Bart Schaefer
2015-11-02 18:32               ` Ray Andrews
2015-11-02 19:37                 ` ZyX
2015-11-02 22:10                   ` Bart Schaefer
2015-11-02 22:50                     ` Ray Andrews
2015-11-02 21:05                 ` Bart Schaefer
2015-11-02 23:01                   ` Ray Andrews
2015-11-03 15:57                     ` Bart Schaefer
2015-11-04 14:48                       ` Ray Andrews
2015-11-04 16:39                         ` Bart Schaefer
2015-11-04 18:31                           ` Ray Andrews
2015-11-02 19:33             ` ZyX
2015-11-02 23:04               ` Ray Andrews

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=151101190842.ZM16752@torch.brasslantern.com \
    --to=schaefer@brasslantern.com \
    --cc=zsh-users@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).