User Defined Global Variables - How to do it?
- To: mathgroup at smc.vnet.net
- Subject: [mg95338] User Defined Global Variables - How to do it?
- From: Donald DuBois <donabc at comcast.net>
- Date: Fri, 16 Jan 2009 06:07:16 -0500 (EST)
I am trying to define my own global variables which will be known to every function that I write just like the system global variable "$HomeDirectory". I have a function which has been written to read values from a disk file and using those values calculate the values of the global variables. I do not know where to put this fuhction so that, at the begiinning of a Mathematica session, these user defined global varialbes are available to be used by any function that I have written that is part of the packages that are autmatically loaded at the beginning of a session. I have previously defined my own global variables in a file called init.m and this file is located in directory: C:\Documents and Settings\Donald\Application Data\Mathematica\Autoload\Foo (I have created the last directory "Foo" off of Autoload.) This method works for global variables that are defined by a simple assignment statement within the file init.m: globalVarA = value Every function that I have written and put into a package - and these packages are loaded *** automatically *** at the beginning of a Mathematica session - can use and knows the value of globalVarA which is defined in init.m. So, before the packages are loaded at the first time I hit Shift + Enter the system already knows the value of globalVarA because it was defined in the init.m file. I now need global variables that cannot be defined so easily by a simple assignment statement. Their values have to be read in and calculated in some function that I call. The sole purpose of this function is to read in and calculate the values of these global variables. There are two problems: (1) I don't know how to make these values globally available to all other functions that are used in the session and that are defined in the packages I created. (2) I don't know how to get this function [the function which calculates the values of the global variables) to "start up" automatically BEFORE I ever have to hit the first Shift + Enter. This function which calculaes the values of global variables uses itself some of the other functions I defined in the packages I created which are automatically loaded at session start time. For instance, below is the schematic defintion of a function where I am calculating the values of two global variables, globalVarB and globalVarC that I want every other function to have access to [access to the values in these global variables] if they need the values of these two variables in their own calculations, just like every function has access to the system global variable "$HomeDirectory". globalDefintions[] := Module[{}, (* Read in values and do calculations for globalVarB and globalVarC ") Return[{globalVarB, globalVarC}] ];(* End Module globalDefinitions *) Then the function is invoked: {globalVarB, globalVarC} = globalDefinitions[]; Where can I put the definition of this function called globalDefintions and its invocation so that: (1) the user does not have to explicity invoke the globalDefinition function at the beginning of every Mathematica session (2) every function in any package that I write should know the values of these global variables. (and these packages that I wrote are currently automatically loaded at the beginning of a Mathematica session). I have tried putting the above defintion of the globalDefinition function in the init.m file and then calling this function from within the init.m file, but that doesn't work. I have tried the same thing by putting the globalDefinition function in the Private and Public sections of a package that I have written (which, as stated above, is automatically loaded at the beginning of every session) and invoked the function within the package - also in a the private and public sections of the package (in a cell in the package that is an initialization cell) but that does not work either. Are there any solutions? Thanks in advance for your help.