2011-02-07 14 views
5

Devo chiamare una funzione java da clojure, che accetta un array float come parametro. Come lo farei in clojure?Clojure - java interop - Come passare un array float>

ho cercato

(classname/function [0.1f 0.2f]) - ma questo non funziona. Chiaramente il problema è con l'array di parametri. Posso chiamare altre funzioni della classe senza problemi, fornire loro di non prendere un array come parametro.

Qualche suggerimento?

Grazie

risposta

4

Prova float-array. Dal documetation:

user=> (doc float-array) 
------------------------- 
clojure.core/float-array 
([size-or-seq] [size init-val-or-seq]) 
    Creates an array of floats 
nil 
user=> (float-array [1 2 3]) 
#<float[] [[email protected]> 
user=> 
+0

Grazie. Questo non ha funzionato per me. Per essere più specifici, sto cercando di chiamare una funzione opengl. In java, il codice è il seguente: GLfloat blackAmbientLight [] = {0.0, 0.0, 0.0}; glLightfv (GL_LIGHT0, GL_AMBIENT, blackAmbientLight); Tuttavia, non sono in grado di chiamare lo stesso dal clojure :-( The (float-array [0 0 0]) non produce ciò di cui ho bisogno quando passo il parametro –

7

sembra che la funzione vuole una serie di GLfloats così l'accumulo di collegamento di float-array non può dare quello che ti serve. la funzione generale costruttore array è (into-array type aseq)

quindi potrebbe essere simile:

(def my-array (into-array GLfloat [0.0 0.0 0.0])) 

in una matrice è più lungo winded però più generale.

Problemi correlati