Pra*_*nav 6 clojure first-class-functions
我有一个函数,它接受一个函数和一个数字,并返回函数的数字应用程序和一个立方体函数:
(defn something [fn x]
(fn x))
(defn cube [x]
(* x x x))
Run Code Online (Sandbox Code Playgroud)
当我按如下方式调用该函数时,它可以工作:
(something cube 4)
Run Code Online (Sandbox Code Playgroud)
但是这会返回一个错误:
(something Math/sin 3.14)
Run Code Online (Sandbox Code Playgroud)
但是,这有效:
(something #(Math/sin %) 3.14)
Run Code Online (Sandbox Code Playgroud)
解释是什么?
ama*_*loy 14
Math.sin不是功能!它是一种直接来自Java的方法,并不理解Clojure函数必须遵循的各种规则.如果将它包装在函数中,那么该函数可以充当代理,将参数传递给"哑"方法并将结果返回到"智能"面向函数的上下文.