Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure (:gen类)和完全限定符号_Clojure_Namespaces_Symbols - Fatal编程技术网

Clojure (:gen类)和完全限定符号

Clojure (:gen类)和完全限定符号,clojure,namespaces,symbols,Clojure,Namespaces,Symbols,我想知道为什么我需要包括(:gen类)来访问从其他ns导入的函数,而不完全限定它们 例如: (ns project.core (:gen-class)) (defn foo [] "foo") (ns project.core-test (:gen-class) (:require [project.core :refer :all])) (foo) ;=> "foo" 我无法理解这个概念 编辑: 我在表格上打错了字。Idk为什

我想知道为什么我需要包括(:gen类)来访问从其他ns导入的函数,而不完全限定它们

例如:

(ns project.core
  (:gen-class))
(defn foo [] "foo")

(ns project.core-test
  (:gen-class)
  (:require [project.core :refer :all]))  
(foo) ;=> "foo"

我无法理解这个概念

编辑: 我在表格上打错了字。Idk为什么(:gen class)解决了这个问题,但现在项目又开始工作了。
ns
表单中的
(:gen class)
子句用于提前编译(AOT)。看

您的设置中一定有其他问题。我的例子是:

> d **/core*
-rw-rw-r-- 1 alan alan 98 Jan 13 16:15 src/fred/core.clj
-rw-rw-r-- 1 alan alan 47 Jan 13 16:15 src/tst/fred/core.clj

src/fred/core.clj
------------------------
(ns fred.core)

(defn foo [] (println "foo you"))

(defn -main []
  (println "main - enter")
  )


src/tst/fred/core.clj
----------------------
(ns tst.fred.core
  (:use fred.core ))

(foo)

> lein test
foo you 
我使用
require
版本得到了相同的结果:

(ns tst.fred.core
  (:require [fred.core :refer :all]))
(foo)
如果我将您的代码粘贴到repl中,它也会起作用:

~/tmp/fred > lein repl
Clojure 1.9.0

fred.core=> (ns project.core)
nil
project.core=> (defn foo [] "foo")
#'project.core/foo

project.core=> (ns project.core-test
          #_=>   (:require [project.core :refer :all]))  
nil
project.core-test=> (foo)
"foo"
~/tmp/fred > lein repl
Clojure 1.9.0

fred.core=> (ns project.core)
nil
project.core=> (defn foo [] "foo")
#'project.core/foo

project.core=> (ns project.core-test
          #_=>   (:require [project.core :refer :all]))  
nil
project.core-test=> (foo)
"foo"