2017-05-12 13 views
2

ラケットのパスライブラリは、ファイルとディレクトリを少し違った方法で扱います。 UnixベースのRacketディストリビューションでは、ディレクトリの最後に末尾に/があります。 in-directoryおよびpath-onlyなどのいくつかの関数は、この情報を使用してファイルとディレクトリにつながるパスを別々に扱います。パスがラケットのディレクトリパスであることを確認してください

残念ながら、パスの作成に推奨される方法は、build-pathにはディレクトリパスを作成するための良い仕組みがありません。私は、文字列としてパスを作成し、string->pathを使用することができます知っているが、それは直接build-pathを使用するよりも脆くなるだろう:私は何ができる

> (string->path "a/b/") 
#<path:a/b/> 

もう一つは、余分な「ゴミを追加するbuild-pathpath-onlyを兼ね備えています'要素をパスに追加します。パスは削除されます。しかし、私はその「ゴミ箱」の文字列を作らなければならないので、これは不器用です。

> (path-only (build-path "a" "b" "trash")) 
#<path:a/b/> 

私はちょうど置く「可能性」にもすることはできませんそのディレクトリパスが、しかし、パス自体は終わりに.を持っていることを保証build-path機能、中.(または'samepath-onlyで除去:

> (build-path "a" "b" 'same) 
#<path:a/b/.> 

は、これらの3つのすべてのディレクトリパスにパスを回すことができますが、ディレクトリ・パスに、既存のラケットのパスを有効にする任意のクリーンな方法はありますか?

答えて

1

あなたは正しいトラックにbuild-pathを使用しています。あなたが探している機能はpath->directory-pathです。これは、パスオブジェクトを取得し、それをディレクトリパスに変換します(これはあなたが言及した末尾に/を追加することを意味します)。

> (build-path "a" "b") 
#<path:a/b> 
> (path->directory-path (build-path "a" "b")) 
#<path:a/b/> 
関連する問題