在尝试解决 4Clojure 问题时”通用计算引擎 http://www.4clojure.com/problem/121”涉及重新实现评估,我不小心最终调用了这样的内容:
(apply '/ '(16 8))
而不是预期的:
(apply / '(16 8))
这带来了返回的令人困惑的副作用8
,这让我觉得我的数学搞砸了。
经过一些调试后,我后来意识到我的错误——我未能评估/
尝试调用它之前的符号 - 因此意识到clojure.lang.Symbol
必须执行clojure.lang.IFn
。但是这个实现是做什么的do?我所能做的就是返回nil
带有一个参数,或者第二个参数(如果给出)。
Symbols 抬头看看自己在地图中,就像关键字一样。看符号的实现 https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Symbol.java#L122:
…
122 public Object invoke(Object obj) {
123 return RT.get(obj, this);
124 }
125
126 public Object invoke(Object obj, Object notFound) {
127 return RT.get(obj, this, notFound);
128 }
…
(RT
is clojure.lang.RT https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/RT.java,它几乎可以完成所有事情。 “运行”?)
在给出的示例中,查找失败(因为 16 不是映射),因此notFound
正在返回值 (8)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)