Advertisement
Guest User

Untitled

a guest
Mar 11th, 2013
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. type op_args = {
  2.       cgi : Netcgi.cgi;
  3.       db : Db.db;
  4.       echo : (string -> unit);
  5.       login : (User.login);
  6.       ...
  7. };;
  8.  
  9. type operation = {
  10.       module_name : string;
  11.       function_name : string;
  12.       func : op_args -> unit;
  13. };;
  14.  
  15. (* List reference, to be updated by modules at init *)
  16. let op_list = ref ([] : operation list);;
  17.  
  18. let add_op_login module_name op_name func =
  19.       let op = {
  20.             module_name = module_name;
  21.             function_name = op_name;
  22.             func = (fun args ->
  23.                   match args.login with
  24.                         User.Logged_in user ->
  25.                               func args user
  26.                         | User.Not_logged_in -> args.echo "Please login");
  27.       } in
  28.       add_op op op_list;;
  29.  
  30. let open Operation in
  31. (*  Old way
  32. let op_args = {
  33.         cgi = cgi;
  34.         db = db;
  35.         echo = echo;
  36.         login = login;
  37.         addr = addr;
  38.         websocket_timeout = websocket_timeout;
  39.         log = (fun s  -> log s);
  40. } in
  41. *)
  42. let op_args = object
  43.         method cgi = cgi
  44.         method db = db
  45.         method echo = echo
  46.         method login = login
  47.         method addr = addr
  48.         method websocket_timeout = websocket_timeout
  49.         method log = (fun s -> log s)
  50. end in  
  51.  
  52. if (op_name <> "" && module_name <> "") then dispatch_op module_name op_name op_args;
  53.  
  54.  
  55. Since there's always only one instance of op_args, i want to replace it with an immediate object, if possible. Sometimes I add variables to op_args, and I would like to add it to only one place in the code, instead of as with a record modify both type definition and instance creation.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement