Я хотел бы разложить этот код:
(* This function is applied to the result of functions below *)
let manage_result r s =
match r with
| Error ( `Msg e ) -> Tsdl.Sdl.log s e;exit 1
| Ok a -> a
(* Examples of function I want to factorize, let's call them f_functions, f for factorize *)
let init () =
let flag = Tsdl.Sdl.Init.everything in
let result = Tsdl.Sdl.init flag in
manage_result result "Init error : %s"
let create_window title w h =
let flag = Tsdl.Sdl.Window.windowed in
let result = Tsdl.Sdl.create_window title ~w:w ~h:h flag in
manage_result result "Create window error : %s"
let get_window_surface window =
let result = Tsdl.Sdl.get_window_surface window in
manage_result result "Get window surface error : %s"
Как видите, две последние строки всех этих f_functions очень похожи. Я хотел бы сделать функцию, которая принимает в качестве аргумента функцию (например, если бы я хотел факторизовать init, функция, переданная в качестве параметра, была бы Tsdl.Sdl.init
) и возвращать функцию, которая возвращает возвращаемое значение функции, переданной как аргумент И обработан через manage_result
.
Сложность в том, что я не знаю, сколько аргументов может принимать функция f_functions.
Любые другие рекомендации приветствуются!
Спасибо.