Racket似乎有4个用于制作规范路径的功能,但每个都略有不同。它们是cleanse-path
,resolve-path
,simplify-path
和normalize-path
。
显然,这些函数不会做同样的事情,因为其中一些函数采用不同的参数。但是这里的文档缺少任何例子。那么,这四个非常相似的函数之间有什么区别呢?
答案 0 :(得分:1)
如果(memq (system-type 'os) '(unix macosx))
cleanse-path
将//
替换为/
resolve-path
解析符号链接simplify-path
删除了额外的..
和.
normalize-path
创建绝对路径并解析符号链接(还有simple-form-path
。这可能是你想要的。)
这是一个示例交互,使用无意义路径上的4个函数:
Welcome to Racket v6.10.0.1.
> (current-directory (find-system-path 'sys-dir))
; now in /
> (cleanse-path "foo//bar/baz/..")
#<path:foo/bar/baz/..>
> (resolve-path "foo//bar/baz/..")
#<path:foo/bar/baz/..>
> (simplify-path "foo//bar/baz/..")
#<path:/foo/bar/>
> (normalize-path "foo//bar/baz/..")
; normalize-path: element within the input path is not a directory or does not
; exist
; element: /foo
以下是在符号链接(在我的计算机上)上使用normalize-path
和simple-form-path
的示例:
Welcome to Racket v6.10.0.1.
> (current-directory "/usr/local/bin")
; now in /usr/local/bin
> (normalize-path "racket")
#<path:/Users/ben/code/racket/fork/racket/bin/racket>
> (simple-form-path "racket")
#<path:/usr/local/bin/racket>
如果(eq? (system-type 'os) 'windows)
,请参阅有关Windows Paths