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

欢迎!有关如何工作的更多信息,请参阅 关于 页面。

0
ClojureCLR

对于某些单元测试,我需要在关闭后能够读取 MemoryStream 的内容。由于这不可能,我想创建一个内存流代理,其中的 Close 调用为空操作,这样即使代码中的外部环节尝试关闭它,我也可以从中读取。然而,这不起作用。

REPL

(import [System.IO MemoryStream StreamWriter])
(let [stream (proxy [MemoryStream] [] (Close [] (println "close!")))]
  (doto (StreamWriter. stream)
        (.Write "testing")
        (.Close)))

输出

close!
Execution error (InvalidProgramException) at System.Diagnostics.StackFrame/Write (NO_FILE:0).
Cannot create boxed ByRef-like values.

虽然明显调用了我的代理 Close 方法,但在那之后抛出了一个错误。

1 个答案

0

问题已创建。已报告了两个其他实例(包括我自己的遭遇)。
在我最初的调查中,这与方法(如 Write)的重载以及在 IL-生成中未正确处理如 ReadOnlySpan 等类型的参数有关。我猜测存在堆分配对象的问题,它没有被适当处理。

创建了 CLRCLR-132 JIRA 问题

...