2024年Clojure状态调查中分享您的想法!

欢迎!请参阅关于页面以了解更多关于如何使用本网站的信息。

+1
REPL

给定一个评估此表达式的pREPL客户端

(do
    (-> (bound-fn []
          (dotimes [_ 4]
            (Thread/sleep 100)
            (println 1)))
        Thread.
        (doto .start))

    1)

输出将是,正确的

{:tag :ret, :val 1, :ns user, :ms 4, :form (do
        (-> (bound-fn []
              (dotimes [_ 4]
                (Thread/sleep 100)
                (println 1)))
            Thread.
            (doto .start))

        1)}
{:tag :out, :val 1
}
{:tag :out, :val 1
}
{:tag :out, :val 1
}
{:tag :out, :val 1
}

现在的问题是,从线程中打印出来输出可能在任何时候,可能现在1分钟之后。

在这段时间里,许多其他的pREPL请求可能已经被处理。

因此,在没有ID的情况下,像{:tag :out, :val 1}这样的信息缺乏足够的前置信息来追踪其来源。

添加ID会有好处吗?

1 答案

0

输出和错误是流,与任何特定请求无关 - 没有一般的方式来关联这些,所以这不是一个好主意。

技术上可以为每个含有该ID的eval创建一个新的*输出*绑定。至少对于CLJ来说,由于CLJS的异步特性,这可能不会带来太大好处。不过,我同意将out/err流视为与评估分开处理似乎最好,因为它们可以来自许多不同的“来源”。
...