我有一个函数,它接受一个函数和一个数字,并返回函数的数字应用程序和一个立方体函数:
(defn something [fn x]
(fn x))
(defn cube [x]
(* x x x))
当我按如下方式调用该函数时,它可以工作:
(something cube 4)
但这会返回错误:
(something Math/sin 3.14)
然而,这有效:
(something #(Math/sin %) 3.14)
解释是什么?
答案 0 :(得分:14)
Math.sin
不是函数!它是一种直接来自Java的方法,并不理解Clojure函数必须遵循的各种规则。如果将它包装在一个函数中,那么该函数可以充当代理,将参数传递给“哑”方法并将结果返回到“智能”面向函数的上下文。