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

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

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 等方法的过度载荷有关,其参数类型为 ReadOnlySpan。我猜测这是与堆分配的对象有关的问题,这些对象在 IL-生成中没有得到妥善处理。

JIRA 问题 CLRCLR-132 为此而创建。

...