gpt4 book ai didi

clojure - 什么时候应该在 Clojure 中使用临时重新绑定(bind)特殊变量这一习惯用法?

转载 作者:行者123 更新时间:2023-12-02 10:35:38 27 4
gpt4 key购买 nike

我注意到一些库(例如 clojure-twitter)使用特殊的变量(用于动态绑定(bind)的变量,被星号包围)进行 oauth 身份验证。您将身份验证保存在 var 中,然后使用 (with-oauth myauth ..)。我认为这是解决此类问题的一个非常好的解决方案,因为您可以为应用程序的每个用户重新绑定(bind) auth var。

我在我一直在编写的电子邮件客户端中采取了类似的路线。我有一个名为 session 的特殊变量,我将其与当前用户的 session 和用户信息绑定(bind)到 map ,并且有各种重要的函数使用该变量中的信息。我编写了一个宏 with-session 来临时在传递给 with-session 的一组表单的上下文中重新绑定(bind)它。事实证明这是一个非常干净的解决方案(对我来说)。

所以,我的问题是:我是否“按仪式行事”?这是一个糟糕的设计决策,还是这是特殊变量的预期用途之一?

最佳答案

你似乎做得完全正确。事实上,有许多内置/contrib 宏的工作原理类似,例如 with-out-strclojure.contrib.sql/with-connection。后者是当今 Clojure 基础设施的一个相当关键的部分,因此无论它使用什么习惯用法都已经受到了很多人的审查。

要记住的重要问题是,您在 bindings/with-bindings 表单范围内启动的线程不会继承相关变量的反弹值;相反,他们看到的是根绑定(bind)。如果您想将绑定(bind)传播到工作线程/代理,请显式传递它们(例如作为函数参数)或使用 bound-fn

关于clojure - 什么时候应该在 Clojure 中使用临时重新绑定(bind)特殊变量这一习惯用法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2263883/

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