在clojure中,如何列出命名空间的功能的答案?如果我有一个命名空间,它是有用的,特别是(ns-imports 'my-package)可以告诉我已经导入的Java代码.我可以找到命名空间列表(all-ns).是否有类似的方法来查找所有可用java包的列表,并预览尚未导入的java类?
我正在通过从Leiningen很多JAR和.class文件的:resource-paths和:java-source-paths分别.但由于我是Java代码库的新手,我实际上并不知道为了导入它们而定义了哪些包.我可以用find,xargs和grep做一些事情,但以编程方式提供这些信息会很不错.此外,在将来,我希望能够在Clojure中对Java代码库进行"反思",例如,注意何时定义了新类.
在LISP的世界里,有一个叫功能`做外部的符号,我用Google搜索的是,调高这个从2007年的讨论,似乎事情已经解决了Clojure的本身,但它是关于Java的Clojure的看法不太清楚.
指定图形的典型SPARQL查询可能如下所示:
SELECT ?b ?c WHERE { GRAPH <http://AliceIRI> {
<http://local.virt/foo> ?b ?c}}
Run Code Online (Sandbox Code Playgroud)
这将告诉我AliceIRI的所有三元组,其中"foo"是一个主题.如果我想查看两个不同的图表,我唯一的选择是做一个UNION:
SELECT ?b ?c WHERE {{ GRAPH <http://AliceIRI> {
<http://local.virt/foo> ?b ?c}}
UNION
{ GRAPH <http://BobIRI> {
<http://local.virt/foo> ?b ?c}}}
Run Code Online (Sandbox Code Playgroud)
或者是否有一些速记可以让我更方便地写这个,如下所示:
SELECT ?b ?c WHERE { GRAPH <http://AliceIRI> + <http://BobIRI> {
<http://local.virt/foo> ?b ?c}
Run Code Online (Sandbox Code Playgroud)
顺便说一下,我在Virtuoso 6.01.3127上.
更新1
为了澄清,我真的希望能够运行:
SELECT ?b ?c WHERE { GRAPH <http://AliceIRI> + <http://BobIRI> {
<http://local.virt/foo> ?b ?c .
<http://local.virt/bar> ?b ?c}}
Run Code Online (Sandbox Code Playgroud)
并有这场比赛?b,并?c使得<http://local.virt/foo> ?b ?c在<http://AliceIRI>和<http://local.virt/bar> ?b …
更新资料
这个问题在很大程度上是重复的,但是下面的问题和我的回答似乎都更说明问题。请参见 在Clojure中动态访问Java字段?对于上一个问题。
我试图在Clojure的Java对象实例中查找字段的设置。点运算符似乎在我天真的希望它起作用的地方失败了。
例如,有了这些定义...
(defn example-point []
(let [instance (java.awt.Point. 1 2)]
(list (. instance x) (. instance y))))
(defn example-point-1 []
(let [instance (java.awt.Point. 1 2)
fields '("x" "y")]
(map #(. instance (symbol %))
fields)))
(defn example-point-2 []
(let [instance (java.awt.Point. 1 2)
fields (map symbol '("x" "y"))]
(map (fn [field] (eval `(. ~instance ~field)))
fields)))
Run Code Online (Sandbox Code Playgroud)
我得到这些返回值:
flood.core> (example-point)
(1 2)
太好了,但是如果我想“以编程方式”提供字段名称怎么办?这就是其他功能应该做的。以我天真的想法,它们应该返回与上面相同的值。但是它们都给出不同的错误。
flood.core> (example-point-1)
IllegalArgumentException找不到匹配的方法:类java.awt.Point clojure.lang.Reflector.invokeMatchingMethod的符号(Reflector.java:53)
flood.core> (example-point-2)
CompilerException java.lang.RuntimeException:无法在代码中嵌入对象,也许未定义print-dup:java.awt.Point [x = 1,y = 2],编译:(/ tmp / …