cleanse-path vs resolve-path vs normalize-path vs Exteet path in Racket

时间:2017-07-19 21:15:42

标签: path racket

Racket似乎有4个用于制作规范路径的功能,但每个都略有不同。它们是cleanse-pathresolve-pathsimplify-pathnormalize-path

显然,这些函数不会做同样的事情,因为其中一些函数采用不同的参数。但是这里的文档缺少任何例子。那么,这四个非常相似的函数之间有什么区别呢?

1 个答案:

答案 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-pathsimple-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

的球拍文档