In F#:
> let f x = x + 2;;
val f : int -> int
> let g x = f x;;
val g : int -> int
> g 10;;
val it : int = 12
> let f x = x + 3;;
val f : int -> int
> g 10;;
val it : int = 12
在 Clojure 中:
1:1 user=> (defn f [x] (+ x 2))
#'user/f
1:2 user=> (defn g [x] (f x))
#'user/g
1:3 user=> (g 10)
12
1:4 user=> (defn f [x] (+ x 3))
#'user/f
1:5 user=> (g 10)
13
请注意,在 Clojure 中,最新版本的 f 在最后一行被调用。然而,在 F# 中,仍然调用旧版本的 f。为什么会这样以及它是如何工作的?
在 Clojure 中f
符号捕获名称f
,而在 F# 中f
符号捕获的值f
。所以每次你打电话时在 Clojure 中g
它看起来f
找出当时该名称所指的内容,而在 F# 中,每次调用g
使用的值f
有当g
函数最初是创建的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)