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 に答える