Reference 无法理解此OCaml代码的输出 #让计数器()= 设c=ref0 in 乐趣()-> 让=c:=!c+1英寸 !C val计数器:单位->单位->整数= #让incCounter=counter();; #incCounter();; -:int=1 #incCounter();; -:int=2
我不明白为什么每次调用Reference 无法理解此OCaml代码的输出 #让计数器()= 设c=ref0 in 乐趣()-> 让=c:=!c+1英寸 !C val计数器:单位->单位->整数= #让incCounter=counter();; #incCounter();; -:int=1 #incCounter();; -:int=2,reference,ocaml,ref,Reference,Ocaml,Ref,我不明白为什么每次调用incCounter();,都不会再次调用行let c=ref 0。似乎每次调用incCounter时,fun()->…部分只对c的一个引用起作用,这是正确的。每次调用特定函数值时,都会访问相同的引用单元格。如果您再次调用计数器,您将得到一个不同的函数值,该函数值访问不同的引用单元格 顺便说一句,incr c是表达let=c:=c+1 in…的一种更清晰的方式,这是正确的。每次调用特定函数值时,都会访问相同的引用单元格。如果您再次调用计数器,您将得到一个不同的函数值,该函数
incCounter();,都不会再次调用行let c=ref 0
代码>。似乎每次调用incCounter
时,fun()->…
部分只对c
的一个引用起作用,这是正确的。每次调用特定函数值时,都会访问相同的引用单元格。如果您再次调用计数器
,您将得到一个不同的函数值,该函数值访问不同的引用单元格
顺便说一句,incr c
是表达let=c:=c+1 in…
的一种更清晰的方式,这是正确的。每次调用特定函数值时,都会访问相同的引用单元格。如果您再次调用计数器
,您将得到一个不同的函数值,该函数值访问不同的引用单元格
顺便说一句,incr c
是一种更清晰的表达方式,let=c:=c+1 in…
每次调用counter
时(而不是每次调用incCounter
时,let c=ref 0
行都会被调用)
计数器的类型为unit->unit->int
,这意味着计数器()
返回类型为unit->int
的函数。如果我们说let incCounter=counter()
,我们将获得一个新创建的unit->int类型的函数。此函数反过来修改以前由调用计数器()
构造的引用
这就是说,counter()
的目的是构造一个新的计数器,之后可以递增。每次调用counter
时(而不是每次调用incCounter
时),都会调用let c=ref 0
行
计数器的类型为unit->unit->int
,这意味着计数器()
返回类型为unit->int
的函数。如果我们说let incCounter=counter()
,我们将获得一个新创建的unit->int类型的函数。此函数反过来修改以前由调用计数器()
构造的引用
也就是说,counter()
的目的是构造一个新的计数器,之后可以递增。对ref递增代码的一个提示:有pervivalves.incr可以这样做,所以第4行可以重写为incr c(好的,gsg说了…)对ref递增代码的一个提示:有pervivales.incr可以这样做,所以第4行可以重写为incr c(好的,gsg说了…)
# let counter () =
let c = ref 0 in
fun () ->
let _ = c := !c + 1 in
!c ;;
val counter : unit -> unit -> int = <fun>
# let incCounter = counter () ;;
# incCounter () ;;
- : int = 1
# incCounter () ;;
- : int = 2