6

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

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

解释是什么?

4

1 回答 1

14

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

于 2011-04-20T06:41:10.960 回答