listar pacotes java e classes dentro do clojure

10

No clojure, as respostas para Como listar as funções de um namespace? é útil se eu tiver um namespace em mente, em particular (ns-imports 'my-package) pode me informar sobre o código Java que foi importado. Eu posso encontrar a lista de namespaces com (all-ns) . Existe uma maneira semelhante de encontrar a lista de todos os pacotes java disponíveis e de visualizar as classes java que ainda não foram importadas?

Estou disponibilizando muitos arquivos JARs e .class da Leiningen via :resource-paths e :java-source-paths , respectivamente. Mas desde que eu sou novo para o codebase Java, eu realmente não sei o topo da minha cabeça quais pacotes são definidos para importá-los. Eu poderia fazer algo com find, xargs e grep, mas seria bom ter essa informação disponível programaticamente. Além disso, no futuro, gostaria de poder fazer "reflexão" sobre a base de código Java de dentro do Clojure, por exemplo, percebendo quando uma nova classe foi definida.

No mundo LISP, existe uma função chamada 'do-external-symbols' e eu pesquisei por isso, transformando esta discussão de 2007. Parece que as coisas foram resolvidas para o próprio Clojure, mas é menos claro sobre a visão do Clojure sobre Java.

    
por Joe Corneli 17.04.2015 в 06:17
fonte

2 respostas

2

Se você estiver usando cidra / emacs ou mesmo apenas lein repl , há uma boa funcionalidade de preenchimento automático acessível pelo botão de guia.

=> (java.lang.B  <press tab>
java.lang.Boolean  java.lang.BootstrapMethodError  java.lang.Byte

Esta funcionalidade parece ser dirigida pela biblioteca elogio , por Alexander Yakushev, então eu sugiro que você dê uma olhada sobre como funciona!

    
por claj 28.05.2015 / 21:34
fonte
1

Tanto quanto me lembro, você pode chamar o código Java do Clojure. Recentemente, descobri uma biblioteca chamada "Reflexões" do Google, que listará qualquer coisa em seu caminho de classe para você. Eu analisei classes que eram entidades JPA com essa biblioteca, era bem fácil de usar.

    
por Thomas Nagel 20.04.2015 / 20:34
fonte