gpt4 book ai didi

error-handling - Clojure - 引用一个 defrecord 函数

转载 作者:行者123 更新时间:2023-12-03 07:46:40 29 4
gpt4 key购买 nike

如何引用记录的功能?

对于上下文,我使用的是 Stuart Sierra 的组件。所以我有这样的记录:

(defrecord MyComponent []
component/Lifecycle
(start [component]
...)

(stop [component]
...)

但是在自述文件中,它指出:

...you could wrap the body of stop in a try/catch that ignores all exceptions. That way, errors stopping one component will not prevent other components from shutting down cleanly.



但是,我想使用 Dire为了那个原因。现在我该如何引用 stop与 Dire 一起使用的功能?

最佳答案

有两种自然选择:

  • 您可以使用 Dire 来处理 component/stop 的错误。 (可能还有 start ):
    (dire.core/with-handler! #'com.stuartsierra.component/stop
    …)

    这样,您将致力于处理您可能在系统中使用的所有组件以及对 component/stop 的任何调用的错误。在您的应用程序的任何地方制作。
  • 您可以引入一个顶级函数来处理组件的 stop逻辑,将其注册到 Dire 并拥有您的 component/stop实现只是委托(delegate)给它,也许处理 start相似地:
    (defn start-my-component [component]
    …)

    (defn stop-my-component [component]
    …)

    (dire.core/with-handler! #'start-my-component
    …)

    (dire.core/with-handler! #'stop-my-component
    …)

    (defrecord MyComponent […]
    component/Lifecycle
    (start [component]
    (start-my-component component))

    (stop [component]
    (stop-my-component component)))
  • 关于error-handling - Clojure - 引用一个 defrecord 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33456969/

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