ocaml - OCaml:两个函数的内部“让”
问题描述
我想做内部“让”,但有两个功能。
我现在有一个功能
let fresh_var () =
let r = ref 0 in
r := !r + 1 ; Var !r;;
我想添加第二个函数,以便它可以更改 r,但 r 对于程序的其余部分保持不可见。就像是:
let r = ref 0 in
let fresh_var () = r := !r + 1 ; Var !r
and let refresh () = r := 0
但是由于语法错误,上面的部分不起作用。
如何在 OCaml 中实现这个想法?
解决方案
您可以简单地创建一个返回一对函数的函数:
let get_fresh_and_reset () =
let r = ref 0 in
(fun () -> incr r; !r), (fun () -> r := 0)
let fresh, reset = get_fresh_and_reset ()
另请注意,正确的语法 is:=
和 not =:
。
编辑:
正如@Virgile提到的,如果您不需要多个计数器,则可以简化:
let fresh_var, refresh =
let r = ref 0 in (fun () -> incr r; !r), (fun () -> r:=0)
推荐阅读
- javascript - Jquery - 用一段带有for循环的html代码替换数据
- authentication - 如何写入 CakePHP 3.8 新的身份验证插件会话
- mongoose - NestJS 错误:错误:Nest 无法解析 AuthService (?, JwtService) 的依赖项
- python - Python - 提取文本下一个兄弟
- r - 如何保存函数的输出?
- c# - 如何让控制台给出随机数 1-10 C# Unity?
- c# - 如何使用 C# 执行 PowerShell 脚本
- r - 子集行包含某些列的 NA
- pascal - 随机在循环内无法正常工作
- docker - 使用 Dockerfile 复制文件