Browse thread
global record
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: | 2006-07-19 (14:08) |
From: | Richard Jones <rich@a...> |
Subject: | Re: [Caml-list] global record |
On Wed, Jul 19, 2006 at 01:11:22PM +0200, Andreas Biegert wrote: > I am developing a bioinformatics sequence analysis application which > contains about 20 modules. One of those modules, the 'Par' module, > encapsulates a record of about 30 configuration parameters needed > throughout the whole application. The parameter record is mostly > static but some values can be overwritten by command-line options. Is > there a way to make the (possibly modified) parameters record globally > accessable throughout all modules? This would be much more convenient > than having to pass the parameters record to virtually all functions > in my application. THX for helping. This is a bit ugly, but we use it in our Adwords API toolkit: -------------------------------------------------- stdargs.mli val username : string val password : string val client : string option val token : string val update : bool val verbose : bool val args : string list -------------------------------------------------- stdargs.ml let username = ref "" let password = ref "" let client = ref "" let token = ref "" let update = ref false let verbose = ref false let args = ref [] (* followed by some code which tries to read default values * from $HOME/.adwordsapidata -- code omitted *) (* parse the command line parameters *) let argspec = [ "--username", Arg.Set_string username, "Adwords account username."; "--password", Arg.Set_string password, "Adwords account password."; "--client", Arg.Set_string client, "Adwords account client (optional)."; "--token", Arg.Set_string token, "Adwords account token."; "--update", Arg.Set update, "Perform updates."; "--verbose", Arg.Set verbose, "Be verbose."; ] let anon_fn str = args := str :: !args let usage = Sys.executable_name ^ " [--options]" let () = Arg.parse argspec anon_fn usage let username = !username let password = !password let client = if !client = "" then None else Some !client let token = !token let update = !update let verbose = !verbose let args = List.rev !args --- Then the code just stuff like: open Stdargs if verbose then printf "this is verbose mode\n" Rich. -- Richard Jones, CTO Merjis Ltd. Merjis - web marketing and technology - http://merjis.com Team Notepad - intranets and extranets for business - http://team-notepad.com