2009-07-27 9 views
1

J'essaie d'écrire une fonction pour lire un fichier son une fois, en utilisant certaines ressources que j'ai trouvées. Le code est le suivant:Problème lors de l'appel de getCodeBase dans Clojure

 
(defn play [file] 
    (let [songp (URL. (.getCodeBase) file) 
    song (.newAudioClip songp)] 
    (. song play))) 

Le problème est, (.getCodeBase) est une expression de membre incorrect. Je ne suis pas sûr de ce qu'il faut faire. Comment appelez-vous une méthode comme celle-ci? Dans le code Java que j'ai regardé, il a simplement été appelé comme suit:

getCodeBase() 

Ai-je raté quelque chose?

Répondre

4

.getCodeBase est un appel de méthode d'instance, et en tant que tel nécessite un récepteur (ce qui précède le point en Java). Si votre code Java était getCodeBase(), alors il y a deux possibilités: soit cela signifie en fait this.getCodeBase(), dans ce cas, vous devez comprendre ce que this était dans cette méthode, et spécifiez comme premier argument:

(.getCodeBase obj) 

Ou , il pourrait être une méthode statique de cette classe (ou l'une de ses classes de base), auquel cas vous devez utiliser une expression d'invocation de méthode statique à la place:

(ClassName/getCodeBase) 

affichage du code Java que vous essayez de traduire , avec suffisamment de contexte, permettrait probablement de répondre à cette question plus en détail.