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

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

+1
ClojureCLR
重标记

ClojureCLR版本的io/as-file返回一个FileInfo对象,它只能表示一个文件(而不是目录,因为目录由DirectoryInfo类表示)。另一方面,JVM CLojure返回一个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版中实现,可能会在本周晚些时候发布。
...