Re: Using package functions in Manipulate/DynamicModule
- To: mathgroup at smc.vnet.net
- Subject: [mg109149] Re: Using package functions in Manipulate/DynamicModule
- From: Albert Retey <awnl at gmx-topmail.de>
- Date: Mon, 19 Apr 2010 04:11:59 -0400 (EDT)
- References: <hq0mqd$k0u$1@smc.vnet.net>
Hi,
> So, I decided to try for the cell to just load the package whenever it
> needs to be displayed for the first time.
> "Initialization:>Needs["AddOns'"]" seemed to be perfect. However, it
> doesn't work as expected.
> For example: (SS and IListPlot are from AddOns.m)
> Manipulate[
> IListPlot[SS[p, 100] @@ Range[100]], {p, 1, 100, 1},
> Initialization -> Needs["AddOns`"], SaveDefinitions -> True]
> doesn't work and tells me there are double definitions in Global` and
> AddOns` of IListPlot and SS (right after starting the kernel)
I think your problem are namespaces and the time when symbols are
created: When the Manipulate is seen, the variables IListPlot and SS
will be created as variables in the Global` context, and only afterwards
the package is loaded, creating the same variables in the
AddOns`-Context. To prevent this there are several ways, one of the most
straightforward would be to use explicitly the full long names of the
symbols, that is (presumably) AddOns`IListPlot and AddOns`SS. There are
several other possibilities, like only creating the symbols when the
body is evaluated with something like:
Symbol["IListPlot"][Symbol["SS"][p, 100] @@ Range[100]]
for your ultimate goal to include everything in one notebook there seem
to be solutions, but I don't know of anything "simple"...
hth,
albert