MathGroup Archive 2010

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: overloading a function name in a package? How to query all names?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg110819] Re: overloading a function name in a package? How to query all names?
  • From: Leonid Shifrin <lshifr at gmail.com>
  • Date: Wed, 7 Jul 2010 07:45:37 -0400 (EDT)

Nasser,

As far as I can tell, the short answer is that you have to list all use
cases, corresponding to your overloaded definitions
for a given function, in a single usage message for that function. In fact,
exactly this practice is adopted for built-in functions.
In your case, it will look like:

boo1::usage="boo1[a] does this \n boo1[a,b] does that ..."

Assigning boo1::usage twice is just the same as would be for assigning any
variable twice - only the last value is stored.

If you want more detailed information, you can write a custom function which
parses DownValues of a given function and
returns some extracted information to the user. However, the point of
well-written usage messages should be that such additional measures
are unnecessary (particularly because you will be tempted then to give the
user more implementation details than is really
necessary).

Regards,
Leonid


On Tue, Jul 6, 2010 at 1:03 PM, Nasser M. Abbasi <nma at 12000.org> wrote:

> Hello;
>
> I have package where I overloaded the same function name, defined to
> accept different arguments. as follows:
>
>


> -------------------
> BeginPackage["foo`"]
>
> boo1::usage="call me as follows: boo1[a,b]"
> boo1::usage="call me as follows: boo1[a]"
>
> Begin["`Private`"]
>
> boo1[a_,b_]:=Module[{},Print["in v1 of boo1"]];
>
> boo1[a_]:=Module[{},Print["in v2 of boo1"]];
>
> End[]
> EndPackage[]
> --------------------------------
>
> Now, I do
>
> <<foo`
>
> And I can call either of them OK
>
> boo1[1,2]
> boo1[1]
>
>
> But when I do
>
> Names["foo`*"]
>
> It only shows name boo1 once. (I can understand this*)
>
> And when I do
>
> ?foo`*
>
> It only list boo1 once. It seems to show the ::usage of the last one.
> OK. I can understand this.
>
> But, then, is there a way to show the user than I have more than one
> version of the same function name in the package? Without having to look
> into the package file?
>
> I'd like to overload the function name, since I need to call it
> differently sometimes, and I do not want to make up new names of the
> same function, as in booV1[], booV2[], etc... since they all do the same
> logical action, but accept different arguments depending on the options
> needed, and so they all just have the same name, and the correct version
> will be called depending on the arguments used.
>
> Overloading works OK when calling. I am just asking on how to show that
> I have more than one function of the same name in the package, so I know
> how to call each one.
>
> I looked a the docs, but so far, did not see anything. will keep
> looking....
>
> thanks
> --Nasser
>
>
>


  • Prev by Date: Re: overloading a function name in a package? How to query all names?
  • Next by Date: Re: Defining UpValues
  • Previous by thread: Re: overloading a function name in a package? How to query all names?
  • Next by thread: Re: overloading a function name in a package? How to query all names?