mba*_*768 3 macros ocaml records
我是一个非常新手的OCaml程序员,所以如果这是一个愚蠢/明显的问题,请原谅我.有很多东西要吸收,我可能在文档中错过了这个.
我有一个代码基础,看起来像这样:
let update_x p x =
add_delta p;
p.x <- x;
refresh p
let update_y p y =
add_delta p;
p.y <- y;
refresh p
let update_z p z =
add_delta p;
p.z <- z;
refresh p
Run Code Online (Sandbox Code Playgroud)
复制被开始的错误我,因为我想要写的是这样的:
let update_scalar p scalar value =
add_delta p;
magic_reflection (p, scalar) <- value;
refresh p
Run Code Online (Sandbox Code Playgroud)
这样当我更新x时我可以简单地调用:
update_scalar p 'x' value
Run Code Online (Sandbox Code Playgroud)
这就是"宏!" 对我而言,我不相信OCaml有一个宏系统.我还可以做些什么?
你无法做到你想要的,但你可以通过更高阶函数大大减少样板:
let update_gen set p x =
add_delta p;
set p x;
refresh p
let update_x = update_gen (fun p v -> p.x <- v)
let update_y = update_gen (fun p v -> p.y <- v)
let update_z = update_gen (fun p v -> p.z <- v)
Run Code Online (Sandbox Code Playgroud)
OCaml确实有一个宏系统(camlp4),它允许你实现这种事情,有些工作.