确保路径是 Racket 中的目录路径



Racket的路径库处理文件和目录的方式略有不同。在基于 Unix 的 Racket 发行版中,目录末尾有一个尾随/。多个函数(如in-directorypath-only)将使用此信息以不同的方式处理指向文件和目录的路径。

不幸的是,创建路径的推荐方法build-path没有任何用于创建目录路径的良好机制。我知道我可以将路径作为字符串并使用string->path,但这比直接使用build-path更脆弱:

> (string->path "a/b/")
#<path:a/b/>

我可以做的另一件事是将build-pathpath-only结合起来,在路径中添加一个额外的"垃圾"元素,然后将其剥离。但这很笨拙,因为我必须制作那个"垃圾"字符串。

> (path-only (build-path "a" "b" "trash"))
#<path:a/b/>

我"可以"在build-path函数中放一个.(或'same),这确保了它是一个目录路径,但是路径本身在末尾有一个.,甚至不能用path-only删除:

> (build-path "a" "b" 'same)
#<path:a/b/.>

虽然这三种方法都可以将路径转换为目录路径,但是否有任何更干净的方法可以将现有的 Racket 路径转换为目录路径?

使用build-path您走在正确的轨道上。您正在寻找的功能是path->directory-path.它接受一个路径对象,并将其转换为目录路径(在 unix 中,这意味着添加您提到的尾随/

> (build-path "a" "b")
#<path:a/b>
> (path->directory-path (build-path "a" "b"))
#<path:a/b/>

相关内容

  • 没有找到相关文章

最新更新