在 clojure 中将函数作为参数传递
我有一个函数,它接受一个函数和一个数字,并返回该函数在数字上的应用程序,以及一个立方体函数:
(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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
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.