1

我使用 SBCL 1.1.4,发现 pathname-directory 的行为很奇怪:

假设有一个路径名包含“..”,下面的例子很简单。SBCL 将每个 ".." 转换为 ":UP"

(pathname-directory "a/b/../")
(:RELATIVE "a" "b" :UP)

(pathname-directory "a/../b/../")
(:RELATIVE "a" :UP "b" :UP)

问题来了:

(pathname-directory "C:/test/../")
;;=> (:ABSOLUTE "test" :UP)

(truename "C:/test/..")
#P"C:/test/../"

(pathname-directory (truename "C:/test/.."))
;;=> (:ABSOLUTE "test" "..")

(pathname-directory #P"C:/test/../")
;;=> (:ABSOLUTE "test" :UP)

在 truename 的返回值上调用 pathname-directory 时,“..”不会转换为“:UP”。(truename "C:/test/..") 也返回 #P"C:/test/../",那么为什么 ".." 没有被转换呢?

4

1 回答 1

0

这似乎是 Windows 上 SBCL 的问题。的真名/a/b/..应该是/a/。相反,它似乎返回了对..条目本身的引用。

在 Linux 上,这就是你得到的:

(truename "/etc/udev/..")
#P"/etc/"

我会将此作为错误报告给 SBCL 开发人员。

于 2013-05-23T08:49:05.393 回答