- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一大堆延迟序列行,我想写入文件。在 C# 中,我会使用 System.IO.File/WriteAllLines
它有一个过载,其中的行是 string[]
或IEnumerable<string>
.
我想在运行时不使用反射来执行此操作。
(set! *warn-on-reflection* true)
(defn spit-lines [^String filename seq]
(System.IO.File/WriteAllLines filename seq))
但是,我收到了这个反射警告。
Reflection warning, ... - call to WriteAllLines can't be resolved.
一般来说,出于性能原因,我需要知道何时需要反射,但我不关心这个特定的方法调用。我愿意编写更多代码来消除警告,但不愿意将所有数据作为数组强制放入内存中。有什么建议吗?
最佳答案
这里有两个需要考虑的选项,具体取决于您是否使用 Clojure 的核心数据结构。
IEnumerable<string>
与 Enumerable.Cast
来自 LINQ此选项适用于任何 IEnumerable
仅包含字符串。
(defn spit-lines [^String filename a-seq]
(->> a-seq
(System.Linq.Enumerable/Cast (type-args System.String))
(System.IO.File/WriteAllLines filename)))
IEnumerable<string>
如果您想使用类型提示,请执行此操作。但请注意,clojure 数据结构未实现 IEnumerable<String>
,因此这可能会导致运行时异常。
^|System.Collections.Generic.IEnumerable`1[System.String]|
将类型的完整 CLR 名称包装在垂直管道 ( |
) 中可以让您指定在 Clojure 语法中非法的字符。
(defn spit-lines [^String filename ^|System.Collections.Generic.IEnumerable`1[System.String]| enumerable-of-string]
(System.IO.File/WriteAllLines filename enumerable-of-string))
这是 (spit-lines "filename.txt" #{})
的异常(exception)情况将集合传递给类型提示版本时:
System.InvalidCastException: Unable to cast object of type 'clojure.lang.PersistentTreeSet' to type 'System.Collections.Generic.IEnumerable`1[System.String]'.
有关specifying types的更多信息.
关于clojure - 将惰性行序列写入 ClojureClr 中的文件而不进行反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26615180/
是否有支持 REPL 和大括号匹配的 ClojureCLR 编辑器?我找到了一个将对 ClojureCLR 的支持添加到 Visual Studio 的项目:vsClojure ,但无法构建它。还有其
我决定调查 Clojure (灵感来自this book)。经过一番研究后,我了解到我可以通过使用 ClojureCLR 来利用我的 .Net 经验。而不需要学习各种Java 库。然而,我发现关于 C
我有一大堆延迟序列行,我想写入文件。在 C# 中,我会使用 System.IO.File/WriteAllLines它有一个过载,其中的行是 string[]或IEnumerable . 我想在运行时
我是一名优秀的程序员,十分优秀!