如何通过 "directory-exists?" 过滤目录列表?
How is it possible to filter a list of directories via "directory-exists?"?
我最近发现了一个奇怪的 racket 行为:每当我尝试过滤通过 directory-list
我的 REPL 创建的目录列表时,我的 REPL returns 我是一个空列表,但是当我尝试使用一个空列表时准引用列表我的 REPL returns 正确过滤的列表。
我现在的问题是: 为什么无法通过 directory-exists?
过滤目录列表以及如何 仅列出目录 球拍?
一些例子:
当我将 directory-exists?
与 filter
和 directory-list
结合使用时,REPL returns 我每次都是空列表:
(filter directory-exists? (map path->complete-path
(directory-list (expand-user-path "~"))))
;; '()
现在,当我过滤一个准引用列表时,如下例所示。 REPL returns 一个正确的过滤列表,包含所有现有目录(没有虚构的目录 ~/blablubb
)
(filter directory-exists?
(map path->complete-path `(,(path->complete-path (expand-user-path "~/documents"))
,(expand-user-path "~/blablubb" ))))
;; '(#<path:/home/niklas/documents>)
FWIW 运行 你的片段
(filter directory-exists?
(map path->complete-path
(directory-list (expand-user-path "~"))))
在 OS X 上给我一个目录列表。
你显然看到了别的东西。
两个问题:
1. What is the result of:
(map path->complete-path
(directory-list (expand-user-path "~"))))
2. Which OS are you using?
directory-list
returns 默认相对路径,稍后相对于 (current-directory)
隐式解析,这可能与您传递给 directory-list
的目录不同.
有点像这样:
~ $ ls dir
file1 subdir2
~ $ cat file1
cat: file1: No such file or directory
从当前目录开始,文件位于路径 dir/file1
,而不仅仅是 file1
。
一个解决方案是要求 directory-list
将目录包含在返回的路径中:
(directory-list the-dir #:build? #t)
那么如果the-dir
是完整路径,结果也是完整路径。
我最近发现了一个奇怪的 racket 行为:每当我尝试过滤通过 directory-list
我的 REPL 创建的目录列表时,我的 REPL returns 我是一个空列表,但是当我尝试使用一个空列表时准引用列表我的 REPL returns 正确过滤的列表。
我现在的问题是: 为什么无法通过 directory-exists?
过滤目录列表以及如何 仅列出目录 球拍?
一些例子:
当我将 directory-exists?
与 filter
和 directory-list
结合使用时,REPL returns 我每次都是空列表:
(filter directory-exists? (map path->complete-path
(directory-list (expand-user-path "~"))))
;; '()
现在,当我过滤一个准引用列表时,如下例所示。 REPL returns 一个正确的过滤列表,包含所有现有目录(没有虚构的目录 ~/blablubb
)
(filter directory-exists?
(map path->complete-path `(,(path->complete-path (expand-user-path "~/documents"))
,(expand-user-path "~/blablubb" ))))
;; '(#<path:/home/niklas/documents>)
FWIW 运行 你的片段
(filter directory-exists?
(map path->complete-path
(directory-list (expand-user-path "~"))))
在 OS X 上给我一个目录列表。
你显然看到了别的东西。
两个问题:
1. What is the result of:
(map path->complete-path
(directory-list (expand-user-path "~"))))
2. Which OS are you using?
directory-list
returns 默认相对路径,稍后相对于 (current-directory)
隐式解析,这可能与您传递给 directory-list
的目录不同.
有点像这样:
~ $ ls dir
file1 subdir2
~ $ cat file1
cat: file1: No such file or directory
从当前目录开始,文件位于路径 dir/file1
,而不仅仅是 file1
。
一个解决方案是要求 directory-list
将目录包含在返回的路径中:
(directory-list the-dir #:build? #t)
那么如果the-dir
是完整路径,结果也是完整路径。