当前位置:  开发笔记 > 编程语言 > 正文

可以记录OCaml中的字段更新吗?

如何解决《可以记录OCaml中的字段更新吗?》经验,为你挑选了1个好方法。

我是一个非常新手的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 

复制被开始的错误我,因为我想要写的是这样的:

let update_scalar p scalar value =
    add_delta p;
    magic_reflection (p, scalar) <- value;
    refresh p

这样当我更新x时我可以简单地调用:

update_scalar p 'x' value

这就是"宏!" 对我而言,我不相信OCaml有一个宏系统.我还可以做些什么?



1> 小智..:

你无法做到你想要的,但你可以通过更高阶函数大大减少样板:

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)

OCaml确实有一个宏系统(camlp4),它允许你实现这种事情,有些工作.

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有