在尝试解决4Clojure问题 "通用计算引擎" 时,涉及重新实现评估的过程中,我意外地调用了类似于以下内容的东西:
(apply '/ '(16 8))
而不是预期的:
(apply / '(16 8))
这导致了令人困惑的副作用,返回8
,让我以为我的数学有问题。
后来在调试时我意识到我的错误——我未能在尝试调用它之前评估/
符号——因此意识到clojure.lang.Symbol
必须实现clojure.lang.IFn
。但是这个实现做了什么呢?我唯一能让它做的就是用一个参数返回nil
,或者如果给出第二个参数则返回第二个参数。