小编inn*_*cat的帖子

OCaml中的弱多态性

我对OCaml中的弱多态性有点困惑.

请参阅以下代码片段,我在其中定义一个函数remember:

let remember x =
   let cache = ref None in
      match !cache with
       | Some y -> y
       | None -> cache := Some x; x
;;
Run Code Online (Sandbox Code Playgroud)

编译器可以推断出多态类型'a -> 'a,并cache在本地使用.

但是当我修改上面的代码时

let remember =
   let cache = ref None in
    (fun x ->  match !cache with
         | Some y -> y
         | None -> cache := Some x; x)
;;
Run Code Online (Sandbox Code Playgroud)

编译器推断出弱多态类型'_a -> '_a,似乎cache在调用之间共享remember.

为什么编译器在这里推断出弱多态类型以及为什么要 …

ocaml functional-programming ml value-restriction

7
推荐指数
2
解决办法
988
查看次数