请分享您的观点,参与2024年Clojure状态调查!

欢迎!请参阅关于页面,了解该功能的一些更多信息。

+1投票
ClojureCLR
重新标记

ClojureCLR版本的io/as-file返回一个FileInfo对象,它只能表示一个文件(而不是目录,因为目录是用DirectoryInfo类表示的)。另一方面,JVM CLjure返回一个File对象,它可以表示两者。这导致评估结果不同

Clojure

user=> (require '[clojure.java.io :as io])
nil
user=> (.exists (io/as-file "/"))
true

ClojureCLR

user=> (require '[clojure.clr.io :as io])
nil
user=> (.Exists (io/as-file "/"))
false

建议的解决方案是返回一个FileSystemInfo对象,它是FileInfoDirectoryInfo的父类,因此能够表示两者,类似于Java中的File类。

1 答案

0 投票
建议的修复方案并不真正有效。 `FileSystemObject` 是一个抽象类。 必须创建 `FileInfo` 或 `DirectoryInfo` 对象之一——您选择具有所需功能的那个。 为此,我保留了 'as-file' 不做修改,并添加了 `as-dir`。

此外,为了对 `clojure.java.io/file` 做一个粗略的近似,我添加了 `file-info` 和 `dir-info`。 它们可以接受多个参数,将它们转换为字符串,并使用目录分隔符连接它们。 它会将任何 '错误的' 分隔符字符转换为平台正确的分隔符——一旦你进入 `DirectoryInfo` 和 `FileInfo` 的领域,就难以保持中立。 因此,您可以执行类似于 `(file-info "a/b" "c\\d")` 的混合模式操作。

这将在 1.12.0 的 alpha6 中,可能在本周晚些时候发布。
...