功能易于创建:
(defn x [y] (* y y))
(x 8) ;64
但他们很难检查因为
(print x) ; #<core$x my-namespace$x@34990a46>
不是很有用。有没有办法进入内部?
如果没有办法,一个复杂的程序可能是一个巨大的宏可能跟踪创建和组合函数的位置,如valgrind跟踪数组的长度等。也许已经编写了一些工具来执行此调试。
编辑: 这是另一个问题的部分重复,区别在于以编程方式与REPL的区别。但是,我不知道这些任务有多么不同,因为答案很复杂。
答案 0 :(得分:0)
这是纯粹的形式,不可能。函数对调用它们的代码很大程度上是不透明的。这使得许多Clojure程序员更愿意在可能的情况下(特定地图)传递数据,这些数据可以更容易地组合。
有可能抓住函数的源并从中做出一些推论,虽然它很难,因为源可能在编译时不再存在来自系统的某些状态,以及许多其他状态挑战。
core.async是一个巨大的宏重型库,它真的可以从这种能力中受益,虽然它缺乏解决跨函数调用的异步操作的能力,因为它目前认为在一般情况下正确执行此操作是不切实际的。感。在某些情况下,您可以通过检查来源获得一些您想要的效果。