Преобразование пространства имен Clojure - в _
Ошибка, как показано на странице ошибок Noir: java.io.FileNotFoundException: Could not locate boundaries/lat_long__init.class or boundaries/lat_long.clj on class path
Код, который требует этого:
(ns boundaries.views.boundary
(:use noir.core
hiccup.core
hiccup.page-helpers)
(:require
[boundaries.lat-long :as lat-long]
[noir.response :as resp]))
Почему он ищет lat_long
вместо указанного lat-long
? существуют границы /lat-long.clj, а также соответствующее пространство имен boundaries.lat-long.
2 ответа
JVM не позволяет -
s в именах классов, поэтому компилятор Clojure преобразует их в _
s
проблема, скорее всего, связана с зависимостями project.clj.
При диагностике такого рода проблемы:
- пространство имен доступно из REPL?
- файл.class появляется в каталоге lib для проекта?
- повторный запуск
lein deps
Вам нужно переименовать границы /lat-long.clj в boundaries/lat_long.clj.
Обратите внимание, что вам не нужно менять имя пространства имен. Соглашение clojure заключается в использовании "-" для функций и имен пространств имен.
Ответ Стюарта Сьерры на /questions/7722891/pochemu-clojure-preobrazuet-chertyi-v-imenah-v-podcherkivaniya-v-fajlovoj-sisteme/7722897#7722897: "Это необходимый обходной путь взаимодействия Java".