2011-02-07 27 views
5

Tôi cần gọi hàm java từ clojure, nó lấy mảng float làm tham số. Làm thế nào tôi sẽ làm điều này trong clojure?Clojure - java interop - Làm thế nào để vượt qua một mảng phao>

tôi đã cố gắng

(classname/function [0.1f 0.2f]) - nhưng điều này không hoạt động. Rõ ràng vấn đề là với mảng tham số. Tôi có thể gọi các hàm khác trong lớp mà không có vấn đề gì, cung cấp chúng không lấy mảng làm tham số.

Mọi đề xuất?

Cảm ơn bạn

Trả lời

4

Hãy thử float-array. Từ 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

Cảm ơn bạn. Điều này không hiệu quả với tôi. Để cụ thể hơn, tôi đang cố gọi hàm opengl. Trong java, mã giống như sau: GLfloat blackAmbientLight [] = {0.0, 0.0, 0.0}; glLightfv (GL_LIGHT0, GL_AMBIENT, blackAmbientLight); Tuy nhiên, tôi không thể gọi giống nhau từ clojure :-( (mảng nổi [0 0 0]) không tạo ra những gì tôi cần khi tôi chuyển tham số –

7

nó trông giống như chức năng mà muốn một loạt các GLfloats nên xây dựng trong shortcut của float-array có thể không cung cấp cho bạn những gì bạn cần. chức năng xây dựng mảng chung là (into-array type aseq)

vì thế nó có thể giống như thế:

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

vào mảng là còn hơi mặc dù tổng quát hơn.

Các vấn đề liên quan