gpt4 book ai didi

clojure - Clojure 符号用作函数时有什么作用?

转载 作者:行者123 更新时间:2023-12-03 00:40:24 26 4
gpt4 key购买 nike

在尝试解决涉及重新实现评估的 4Clojure 问题“Universal Computation Engine”时,我意外地最终调用了如下内容:

(apply '/ '(16 8))

而不是预期的:

(apply / '(16 8))

这会产生返回 8 的令人困惑的副作用,这让我觉得我搞砸了我的数学。

经过一些调试后,我后来意识到我的错误 - 在尝试调用它之前我未能评估 / 符号 - 因此意识到 clojure.lang.Symbol 必须实现clojure.lang.IFn。但该实现的作用是什么?我所能做的就是返回带有一个参数的 nil ,或者返回第二个参数(如果给定的话)。

最佳答案

符号在 map 中查找自己,就像关键字一样。请参阅Symbol's implementation :


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 }

(RTclojure.lang.RT ,它几乎可以完成所有操作。“运行时”?)

在给出的示例中,查找失败(因为 16 不是 map ),因此返回 notFound 值 (8)。

关于clojure - Clojure 符号用作函数时有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12281631/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com