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

发布于 2024-11-02 09:57:53 字数 376 浏览 2 评论 0原文

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

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

什么是解释?

I have a function which takes a function and a number and returns the application of the function on the number, and a cube function:

(defn something [fn x]
  (fn x))

(defn cube [x]
  (* x x x))

When I call the function as follows it works:

(something cube 4)

but this returns an error:

(something Math/sin 3.14)

However, this works:

(something #(Math/sin %) 3.14)

What is the explanation?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

且行且努力 2024-11-09 09:57:53

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

Math.sin is not a function! It is a method straight from Java, and doesn't understand the various rules that Clojure functions have to follow. If you wrap it in a function, then that function can act as a proxy, passing arguments to the "dumb" method and returning the results to your "smart" function-oriented context.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文