Re: overloading a function name in a package? How to query all names?
- To: mathgroup at smc.vnet.net
- Subject: [mg110805] Re: overloading a function name in a package? How to query all names?
- From: Pierre Albarede <pa.news at free.fr>
- Date: Wed, 7 Jul 2010 07:43:01 -0400 (EDT)
- References: <i0urgq$6kp$1@smc.vnet.net>
Hi, On Jul 6, 11:03 am, "Nasser M. Abbasi" <n... at 12000.org> wrote: > 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 Your description is indeed the normal behaviour of Mathematica. Actually, Mathematica maintains a tables of rules for every symbol (function, plain variable, whatever). Instead of boo1::usage="call me as follows: boo1[a,b]" boo1::usage="call me as follows: boo1[a]" you will write boo1::usage="call me as follows: boo1[a,b] or boo1[a]" You can choose to have two names if you like. A slight detail : there is no interest in wrapping things in Module. The only local construct you will ever need in functional programming is f[x_]:=g[x] or With[{x=3},g[x]]. Good luck.