Re: Postponing loading of Package
- To: mathgroup at smc.vnet.net
- Subject: [mg36659] Re: [mg36620] Postponing loading of Package
- From: Rolf Mertig <rolf at mertig.com>
- Date: Wed, 18 Sep 2002 02:09:37 -0400 (EDT)
- Organization: Mertig Consulting
- Sender: owner-wri-mathgroup at wolfram.com
Hi, yes, this is a comon problem. You can either do: y=If[x>1000, ToExpression["BigVariable"][[x]],x] ] or, maybe more readable, declare at the begging of "ThisPackage": bigvar := bigvar = ToExpression["OtherPackage`BigVariable"]; and then y=If[x>1000, bigvar, x] (* ************************** *) Alternatively you can create .mx files which load much quicker than .m files. It would be really nice if WRI could investigate why loading larger .m files is so slow ( I suspect it has to do something with the speed of side effects like DownValues declarations etc., but I don't know ). Rolf Mertig Mertig Consulting http://www.mertig.com ================================== I wrote a package (call it "ThisPackage`") that uses DeclareePackage["OtherPackage`", {"BigVariable"} ]. The idea was to prevent the loading of a large file in routine cases. However, when ThisPackage` defines its functions, inside the Private` area, it includes a conditional call to BigVariable. It turns out that OtherPackage is loaded when that function is defined. I was wondering if there is a way to avoid this. Roughly speaking, here is the setting: BeginPackage[ "OtherPackage`" ] BigVariable::usage="example Begin[Private`] BigVariable=Table[x y,{x,1000},{y,1000}] End[ ] EndPackage[ ] BeginPackage[ "ThisPackage`" ] function::usage="example Begin[Private`] function[x_]:=Module[{y}, y=If[x>1000,BigVariable[[x]],x] ] End[ ] EndPackage[ ] I don't want OtherPakage to be loaded unless function[x] is called with x>1000 but it loads when function is defined. Any ideas? Thanks! Nicholas