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,并且如果 IBlockingDeref 的 deref 超时,则返回给定的 timeout-val

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

备注:已关闭,带注释:在 Clojure 1.12.0-测试版2 中已修复
了解java.lang.Process.waitFor的期望表现,当前实现与普通IBlockingDeref的语义相比非常有用。进程超时通常可以指定为秒或分钟,而不是毫秒。使用超时调用.waitFor的预期返回值为布尔型,未指定超时的情况,则返回Process的退出码。任何对返回退出码(或超时时的nil)的处理都很容易处理nil或超时值。

然而,将此功能嵌入到IBlockingDeref中仍然令人困惑。

1 个回答

0
by

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

...