传递函数作为参数用Clojure
问题描述:
我有一个函数,它接受一个函数和一个数,并返回对数的函数的应用,以及一个立方体功能:传递函数作为参数用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)
什么是解释?
答
Math.sin
不是一个功能!这是一种直接来自Java的方法,并不了解Clojure函数必须遵循的各种规则。如果将它封装在函数中,那么该函数可以充当代理,将参数传递给“哑”方法并将结果返回到“智能”函数导向的上下文中。
谢谢,现在我明白了。实际上,当这种混乱发生时,我试图理解宏。你能向我解释这一行吗? - '由于宏不评估它们的参数,可以将未加引号的函数名称传递给它们,并且可以构造具有参数的函数调用。函数定义不能做到这一点,而是必须传递匿名函数,将函数调用到函数中。 – Pranav 2011-04-20 06:56:10
我的困惑是,我已经明确地将一个没有引号的函数'cube'传递给'something',并且工作正常。 – Pranav 2011-04-20 06:59:26
你可以问这是一个真正的问题,而不是在评论中?这里的格式非常暗淡,我不想为完全不相关的问题添加“另一个答案”。 – amalloy 2011-04-20 07:38:39