From ripley at stats.ox.ac.uk  Fri Feb 23 00:27:56 2007
From: ripley at stats.ox.ac.uk (Prof Brian Ripley)
Date: Thu, 22 Feb 2007 23:27:56 +0000 (GMT)
Subject: [Rd] How to override functions in namespaces?
In-Reply-To: <20070212181335.825821F7B2@mail.rsma.frb.gov>
References: <20070212181335.825821F7B2@mail.rsma.frb.gov>
Message-ID: <Pine.LNX.4.64.0702222318430.27682@gannet.stats.ox.ac.uk>

On Mon, 12 Feb 2007, jhallman at frb.gov wrote:

> In package A I have askForString(), which asks the user for a string.
> Also in package A I have defined ssh(), which calls askForString().
>
> Package B has package A as a prerequisite.
>
> In package B I redefine askForString() to take advantage of a nicer user
> interface made available by B, namely the Emacs mini-buffer prompt.
>
> Packages B and A are both on the search path, with B ahead of A.  If I
> call askForString() at the command prompt, I get the version from B.
> But the version used by ssh() depends on whether or not package A has a
> namespace. If so, ssh() (defined in A) always uses the A version of
> askForString().  How can I get ssh() to use the B version of
> askForString()? Or am I going about this all wrong?

That is one of the main purposes of a namespace, but you can defeat it.

In the scenario you paint, B::askForString() should work (whether or not B 
has a namespace).

If (I am guessing) you want the version that would be gotten at the top 
level (the > prompt) whether or not B is in use, use
get("askForString", pos=1)().

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595



[Rd] How to override functions in namespaces?
Prof Brian Ripley