Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reference 无法理解此OCaml代码的输出 #让计数器()= 设c=ref0 in 乐趣()-> 让=c:=!c+1英寸 !C val计数器:单位->单位->整数= #让incCounter=counter();; #incCounter();; -:int=1 #incCounter();; -:int=2_Reference_Ocaml_Ref - Fatal编程技术网

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