Clojure命名空间转换 - 到_

时间:2012-06-26 02:03:57

标签: clojure noir

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? boundary / lat-long.clj以及相应的boundary.lat-long命名空间。

2 个答案:

答案 0 :(得分:4)

JVM不允许在类名中使用-,因此Clojure编译器会将它们转换为_ s

问题最有可能是project.clj依赖项。

诊断此类问题时:

  • 是REPL提供的命名空间吗?
  • .class文件是否出现在项目的lib目录中?
  • 重新运行lein deps

答案 1 :(得分:0)

您需要将边界/ lat-long.clj重命名为boundary / lat_long.clj。

请注意,您不必更改命名空间名称。 clojure约定是对函数和命名空间名称使用“ - ”。

来自Stuart Sierra的回复https://stackoverflow.com/a/4451693/151650:“这是Java互操作性的必要解决方法。”