2011-01-24 7 views
9

काम नहीं करता है मैं क्लोजर सीखने में बहुत नया हूं। यह मेरा पहला और बहुत सरल क्लोजर होने का इरादा रखता है जिसमें मैं जावा कोड के अंदर से एक सरल क्लोजर विधि कहता हूं। दुर्भाग्य से यह काम नहीं करता है। संकलन सफल हुआ और Clojure REPL से लिखा समारोह करता है के रूप में यह आदेश दिया गया था, लेकिन जब जावा से फोन कर यह निम्नलिखित कहते हैं:जावा से एक बहुत ही सरल क्लोजर फ़ंक्शन को कॉल करना

(ns com.experimental.clojure.test.ClojNum 
    (:gen-class 
    :init init 
    :name com.experimental.clojure.test.ClojNum 
    :methods [ 
      [myinc [int] int] 
    ])) 

(defn -init [] [[] (atom [])])  
(defn myinc "comment" [x] (+ x 1))  
(defn -myinc "comment" [x] (myinc x)) 

:

Exception in thread "main" java.lang.IllegalArgumentException: Wrong number of args (2) passed to: ClojNum$-myinc 
at clojure.lang.AFn.throwArity(AFn.java:439) 
at clojure.lang.AFn.invoke(AFn.java:43) 
at com.experimental.clojure.test.ClojNum.myinc(Unknown Source) 
at com.experimental.clojure.java.JavaCaller.main(JavaCaller.java:14) 

यहाँ बहुत ही सरल Clojure कोड है और जावा भाग:

package com.experimental.clojure.java; 

import com.experimental.clojure.test.ClojNum; 

public class JavaCaller { 
/** 
    * @param args 
    */ 
public static void main(String[] args) { 
    int i = 0; 
    System.out.println(i); 
    ClojNum c = new ClojNum(); 
    i = c.myinc(0); 
    System.out.println(i); 
} 
} 

मैंने क्या गलत किया? (नोट दोबारा: यह पहली सफल फ़ंक्शन कॉल करने के लिए प्राइमेटिव टेस्ट कोड है)

सहायता के लिए धन्यवाद, मैं अनजान हूं।

+0

http://stackoverflow.com/questions/2181774/calling-clojure-from-java – Jeremy

उत्तर

11

टिप्पणियों में जेरेमी का लिंक आपको क्लोजर क्लास में एक स्थिर विधि कॉल करने का एक तरीका दिखाता है। आप किसी ऑब्जेक्ट उदाहरण पर एक clojure समारोह कॉल करना चाहते हैं, तो आप अपने आवरण विधि परिभाषा के लिए एक पैरामीटर जोड़ने की जरूरत:

(defn -myinc "comment" [this x] (myinc x)) 

'इस' पैरामीटर किसी भी गैर स्थिर आवरण समारोह के लिए आवश्यक है। क्लोजर ने अपवाद फेंक दिया क्योंकि इसे केवल एक के साथ परिभाषित फ़ंक्शन के लिए दो पैरामीटर प्राप्त हुए। ध्यान दें, आप अपने में कुछ भी नहीं बदलते: जेन-क्लास: विधियों सेक्शन या मायिंक फ़ंक्शन परिभाषा स्वयं।

दस्तावेज़ीकरण थोड़ा सा स्पैस है, लेकिन इसका उदाहरण यहां पाया जा सकता है: http://clojure.org/compilation (पृष्ठ पर अंतिम उदाहरण उदाहरण विधियों को दिखाता है)।

+0

त्वरित उत्तर के लिए धन्यवाद। यह अब ठीक काम करता है। :) – Ujvari

संबंधित मुद्दे