Racket似乎有4个用于制作规范路径的函数,但每个函数都略有不同。它们是cleanse-path
、resolve-path
、simplify-path
和normalize-path
。
显然,这些函数与其中一些接受不同参数的功能不同。但是文档在这里缺少任何示例。那么,这四个非常相似的功能之间有什么区别呢?
If(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 路径的 Racket 文档