请分享您的看法,参加2024 Clojure 状态调查!

欢迎!请访问关于页面以了解更多信息。

+2
Java 互操作
已关闭

在 clojure.java.process/start 中的 reification 的 IBlockingDeref 没有按照 deref 文档中的规范实现。

3 参数版本的 IBlockingDeref 期望 timeout 参数为毫秒,第三个参数是 timeout-val。在 clojure.java.process(下文链接的行 113) 实现中错误地期望两个参数都是一个超时,它的单位由最后一个参数指定的 java.util.concurrent.TimeUnit 决定。当给出一个 j.u.c.TimeUnit 作为 timeout-val 时,在超时后它仍然返回 nil

预期:这个 IBlockingDeref 的实现始终假设时间单位是硬编码为 TimeUnit/MILLISECONDS,并且如果 deref 到 IBlockingDeref 超时,则返回给定的 timeout-val

请参见clojure/java/process.clj#L113

以以下备注关闭: 已在 Clojure 1.12.0-beta2 中修复
探讨java.lang.Process.waitFor的期望应用,当前实现相比普通IBlockingDeref的语义非常实用。进程超时通常可以指定为秒或分钟,而不是毫秒,.waitFor在超时的情况下期望返回值为布尔型,没有指定超时时,返回的就是Process的退出码。任何对返回退出码(或超时时的nil)的处理都可以轻松地处理nil或一些超时值。

然而,将其功能嵌入到IBlockingDeref中仍然让人感到困惑。

1 条回答

0投票

谢谢!已登录为https://clojure.atlassian.net/browse/CLJ-2865 - 我们将在1.12发布前修复此问题。

...