小编Joe*_*eli的帖子

列出clojure中可用的java包和类

在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的看法不太清楚.

java reflection clojure leiningen

10
推荐指数
1
解决办法
671
查看次数

对两个图运行sparql查询?

指定图形的典型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 …

union graph sparql

9
推荐指数
1
解决办法
9021
查看次数

clojure-如何(以及何时)调用点运算符?

更新资料

这个问题在很大程度上是重复的,但是下面的问题和我的回答似乎都更说明问题。请参见 在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 / …

java clojure quote

5
推荐指数
1
解决办法
304
查看次数

标签 统计

clojure ×2

java ×2

graph ×1

leiningen ×1

quote ×1

reflection ×1

sparql ×1

union ×1