uesr=> (defn ff [f] (f 0))\nuesr=> (ff inc)\n1\nuesr=> (map ff `(inc))\n(nil)\nRun Code Online (Sandbox Code Playgroud)\n为什么ff在map \xef\xbc\x9f中表现不好
\n看看传入了什么map:
(map #(println %1) '(inc))
inc
=> (nil)
(map #(println %1) `(inc))
clojure.core/inc
=> (nil)
Run Code Online (Sandbox Code Playgroud)
两者inc都在引号内,因此它们不会评估功能。在第二个示例中,使用了语法引号inc,因此解析为完全限定的符号。
现在你的代码:
(defn ff [f] (f 0))
(map ff `(inc))
=> nil
Run Code Online (Sandbox Code Playgroud)
您的函数计算结果为:
('inc 0)
=> nil
('clojure.core/inc 0)
=> nil
Run Code Online (Sandbox Code Playgroud)
符号在对象中查找自身:
('inc {'inc 1 'dec 2})
=> 1
('inc #{'inc 'dec})
=> inc
Run Code Online (Sandbox Code Playgroud)
'inc未在 中找到0,因此nil返回(您甚至可以添加not-found参数)。
('inc 0)
=> nil
('inc 0 1)
=> 1
Run Code Online (Sandbox Code Playgroud)
要获得您想要的结果,请使用list或向量:
(map #(println %1) [inc])
#object[clojure.core$inc 0x4fa1f07 clojure.core$inc@4fa1f07]
=> (nil)
(map #(%1 0) (list inc))
=> (1)
(map #(%1 0) [inc])
=> (1)
Run Code Online (Sandbox Code Playgroud)