在尝试解决涉及重新实现评估的4Clojure问题" 通用计算引擎 "时,我意外地结束了这样的事情:
(apply '/ '(16 8))
Run Code Online (Sandbox Code Playgroud)
而不是预期的:
(apply / '(16 8))
Run Code Online (Sandbox Code Playgroud)
这有一个令人困惑的返回副作用8,这让我觉得我搞砸了我的数学.
我稍后在一些调试后意识到我的错误 - 我/在尝试调用它之前未能评估符号 - 因此意识到clojure.lang.Symbol必须实现clojure.lang.IFn.但是那个实现有什么作用呢?我能做的就是nil用一个参数返回,如果给出则返回第二个参数.
Ash*_*she 12
符号在地图中看起来很像关键字.请参阅Symbol的实现:
…
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 }
…
Run Code Online (Sandbox Code Playgroud)
(RT是clojure.lang.RT,它几乎可以做任何事情."RunTime"?)
在给出的示例中,查找失败(因为16不是映射),因此notFound返回值(8).
| 归档时间: |
|
| 查看次数: |
712 次 |
| 最近记录: |