在clojure中将函数作为参数传递

时间:2011-04-20 06:26:36

标签: clojure first-class-functions

我有一个函数,它接受一个函数和一个数字,并返回函数的数字应用程序和一个立方体函数:

(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)

解释是什么?

1 个答案:

答案 0 :(得分:14)

Math.sin不是函数!它是一种直接来自Java的方法,并不理解Clojure函数必须遵循的各种规则。如果将它包装在一个函数中,那么该函数可以充当代理,将参数传递给“哑”方法并将结果返回到“智能”面向函数的上下文。