gpt4 book ai didi

naming-conventions - clojure 中如何使用 `*var-name*` 命名约定?

转载 作者:太空宇宙 更新时间:2023-11-03 18:32:05 26 4
gpt4 key购买 nike

作为一个不熟悉 clojure 的人,我应该如何最好地理解变量的命名约定,如 *var-name*

这似乎是一个指示全局变量的 lisp 约定。但据我所知,在 clojure 中,此类变量出现在 namespace 中。

我非常希望能简要解释一下当作者在他们的代码中使用这样的变量时我应该期待什么,最好是举例说明如何以及为什么在 clojure 库中使用和更改这样的变量。

最佳答案

这是其他 Lisp 中使用的约定,例如 Common Lisp,用于区分 special variables ,与词法变量不同。 特殊动态 变量将其绑定(bind)存储在动态环境中,这意味着它的当前值对代码中的任何点可见取决于它如何被更高的绑定(bind)向上调用堆栈,而不是仅依赖于最本地的词法绑定(bind)形式(例如 letdefn)。

请注意,在他的书中 Let Over Lambda , Doug Hoyte 反对命名特殊变量的“耳罩”星号约定。他使用了一种不寻常的宏样式来引用自由变量,并且他不愿 promise 或区分这些符号最终会引用词法变量还是动态变量。

虽然专门针对 Common Lisp,但您可能会喜欢 Ron Garret的随笔The Idiot's Guide to Special Variables .其中大部分仍然适用于 Clojure。

关于naming-conventions - clojure 中如何使用 `*var-name*` 命名约定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1986961/

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