ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
From: Wolfgang Schuster <schuster.wolfgang@googlemail.com>
To: mailing list for ConTeXt users <ntg-context@ntg.nl>
Subject: Re: setvalue/setvariable
Date: Thu, 5 Feb 2009 22:37:48 +0100	[thread overview]
Message-ID: <4D08B660-CD44-4A2C-ACE5-5BEC680C86DF@gmail.com> (raw)
In-Reply-To: <F8AD1C1E-FBA3-476E-9A9C-99DEFF3BD0D4@gmail.com>


Am 05.02.2009 um 22:08 schrieb Wolfgang Schuster:

> Am 05.02.2009 um 21:55 schrieb Peter Münster:
>
>>> A faster version of your macro is:
>>>
>>> \def\MyFunction
>>> {\dosingleempty\doMyFunction}
>>>
>>> \def\doMyFunction[#1]%
>>> {\removeunwantedspaces\executeifdefined{myfunction:#1} 
>>> {\getvalue{myfunction:default}}}
>>>
>>> \setvalue{myfunction:1}{\medspace dog }
>>> \setvalue{myfunction:2}{\medspace cat }
>>> \setvalue{myfunction:default}{\ldots}
>>
>> I'm working now a lot with \setvariable and \getvariable. What are  
>> the
>> advantages/disadvantages of set/get-value over set/get-variable?
>
> It's more a style decision, set/getvariable is at a higher level
> than set/getvalue (just wrapper around \csname ... \endcsname) and
> they provide a few test macros (doifelsevariable, doifvariable and
> doifnotvariable).

It matters on which level do you work, is your code for the internals
in a module or used by a user.


My example above is on module level and no should use \setvalue to
add his own option for the \MyFunction command, you could now use
low level code and define your own command:

\def\defineMyFunction{\dodoubleargument\dodefineMyFunction}
\def\dodefineMyFunction[#1][#2]%
   {\setvalue{myfunction:#1}{#2}}

\defineMyFunction[1]      [\medspace dog ]
\defineMyFunction[2]      [\medspace cat ]
\defineMyFunction[default][\ldots        ]

You could have also used \setvariables from begin with the following
defintion for the complete macro:

\def\MyFunction{\dosingleempty\doMyFunction}
\def\doMyFunction[#1]%
   {\removeunwantedspaces\getvariabledefault{myvariable}{#1}%
      {\getvariable{myvariable}{default}}}

\setvariables % set all values with one command
   [myvariable]
   [1={\medspace dog },
    2={\medspace cat },
    default={\ldots}]

\setvariable{1}{\medspace dog } % This could be used instead
\setvariable{2}{\medspace cat } % of \setvariables, each value
\setvariable{default}{\ldots}   % is set with a separate command

Wolfgang

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : https://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


      reply	other threads:[~2009-02-05 21:37 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-02-05 20:26 Remove leading spaces Bart C. Wise
2009-02-05 20:36 ` Wolfgang Schuster
2009-02-05 20:50   ` Bart Wise
2009-02-05 20:55   ` setvalue/setvariable (was: Re: Remove leading spaces) Peter Münster
2009-02-05 21:08     ` setvalue/setvariable Wolfgang Schuster
2009-02-05 21:37       ` Wolfgang Schuster [this message]

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=4D08B660-CD44-4A2C-ACE5-5BEC680C86DF@gmail.com \
    --to=schuster.wolfgang@googlemail.com \
    --cc=ntg-context@ntg.nl \
    /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.
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).