kod çalıştırma kodu ile aynı dizinde dosya açma Clojure ile bazı testler yazmaya çalışıyorum. Bu testlerden biri test içeriğini (Python'da yaygın olarak kullanılan bir deyim) kullanmak için, çalışan test dosyasıyla aynı dizinde bir html dosyasının açılmasını içerir. *file*
varyasyonun işi yapacağını sanıyordum, ama bu durum aslında göreli değil.Clojure
Varsayılan leiningen düzenini kullanan projemize demoproj
adı verilir. Testlerim ~/projects/demoproj/test
'da. Bu dizin tekrar proje ismini çoğaltır, ben büyük bir hayranı değilim, ama her neyse. Bu nedenle core.clj
testleri ~/projects/demoproj/test/demoproj/test/core.clj
'dadır. Aynı dizinde small_page.html
adlı bir dosyam var. Ben koyarsam test/core.clj
aşağıdaki:
(println (-> (java.io.File. *file*)
.getPath))
İşte ne olsun:
demoproj/test/readibility.clj
Bu proje tabanının test
dizinine görecelidir. dosya bu konumda okunamaz çünkü
(slurp (-> (java.io.File. *file*)
.getParent
(java.io.File. "small_page.html")
.getPath))
Bu IO hataya neden oluyor şu şekildedir: Ben, yalnızca bu göreli yolu kullanarak örnek html sayfayı okumaya çalıştı. Sıradaki fikrim şu andaki çalışma dizinini almak ve göreceli yolla birleştirmekti. Burada çalışma dizinini nasıl getirdiğini anlatır: mutlak bir yol döndü
(println (-> (java.io.File. ".")
.getCanonicalPath))
:
kötü bir şey/Path-to-home/projects/demoproj
, bu iki dosyaya doğru yola katılmıyorsun; arada bir test
bileşeni eksik. Bu iki yolu birleştirmek, yanlış bir dizin yoluna yol açar.
Yani, sorum şu ki, şu anda yürütülen kod dosyasının mutlak yolunu elde etmenin güvenilir bir yolu var mı? Ve eğer bu mümkün değilse, bu deyime bir alternatif ne olurdu, yani test dosyasına göre bir konumda bulunan bir dosyayı nasıl ayrıştırabilirim?