我正和朋友讨论关闭,他认为(partial + 5)
是关闭.但我认为闭包是一个关闭自由变量的函数
(let [a 10]
(defn func1 [x] (+ x a))
)
Run Code Online (Sandbox Code Playgroud)
然后func1
是一个关闭.但在这种情况下5
不是自由变量.那么哪个是正确的答案?
partial
使用闭包来制作部分功能.partial
通过(source partial)
在repl中使用来查看代码,您将看到它使用闭包.
(defn partial
"Takes a function f and fewer than the normal arguments to f, and
returns a fn that takes a variable number of additional args. When
called, the returned function calls f with args + additional args."
{:added "1.0"}
([f arg1]
(fn [& args] (apply f arg1 args)))
([f arg1 arg2]
(fn [& args] (apply f arg1 arg2 args)))
([f arg1 arg2 arg3]
(fn [& args] (apply f arg1 arg2 arg3 args)))
([f arg1 arg2 arg3 & more]
(fn [& args] (apply f arg1 arg2 arg3 (concat more args)))))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
320 次 |
最近记录: |