Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- type op_args = {
- cgi : Netcgi.cgi;
- db : Db.db;
- echo : (string -> unit);
- login : (User.login);
- ...
- };;
- type operation = {
- module_name : string;
- function_name : string;
- func : op_args -> unit;
- };;
- (* List reference, to be updated by modules at init *)
- let op_list = ref ([] : operation list);;
- let add_op_login module_name op_name func =
- let op = {
- module_name = module_name;
- function_name = op_name;
- func = (fun args ->
- match args.login with
- User.Logged_in user ->
- func args user
- | User.Not_logged_in -> args.echo "Please login");
- } in
- add_op op op_list;;
- let open Operation in
- (* Old way
- let op_args = {
- cgi = cgi;
- db = db;
- echo = echo;
- login = login;
- addr = addr;
- websocket_timeout = websocket_timeout;
- log = (fun s -> log s);
- } in
- *)
- let op_args = object
- method cgi = cgi
- method db = db
- method echo = echo
- method login = login
- method addr = addr
- method websocket_timeout = websocket_timeout
- method log = (fun s -> log s)
- end in
- if (op_name <> "" && module_name <> "") then dispatch_op module_name op_name op_args;
- 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