【发布时间】:2014-01-27 18:42:14
【问题描述】:
似乎 lein 重新编译代码的方式是不可预测的。我在一个目录中有一个 gen-class 文件,试图在另一个目录中访问它。例如,给定这个 gen-class:
(ns a.Target
(:gen-class
:state state
:init init
:constructors {[String String] []}))
(defn -init
[m1 m2]
[[] (atom {"A" m1 "B" m2})])
(defn -deref
[this]
@(.state this))
并尝试从另一个命名空间访问它,简化为尝试 1、2、3 的随机变化:
(ns b.runner
(:require [a.Target ] :as Target) ;1
(:import '(a Target)) ;2
)
(compile 'a.Target) ;3
似乎没有可以识别“Target”而不是“a.Target”的语法,所以我处理 gen-class 的方式显然有些不正确。这是一个问题,因为我试图使用带注释的提供程序方法访问我们的 guice-injector,而注释语法似乎不接受完整或简单的类规范:
(definterface TargetProvider (^a.Target getTarget [this] ))
=> Exception in thread "main" java.lang.UnsupportedOperationException: nth not supported on this type:
或简化的:
(definterface TargetProvider (^Target getTarget [this] ))
=> Can't find class java.lang.Target
【问题讨论】:
-
您的 ns 表单中有错字:
(:require [a.Target :as Target]),而不是(:require [a.Target ] :as Target)。 -
你到底想在这里实现什么?
标签: clojure clojure-java-interop