我对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.
为什么编译器在这里推断出弱多态类型以及为什么要 …