2013-12-11 3 views
7

मेरे पास किसी ऑब्जेक्ट पर एक विधि है।क्या मैं क्लोजर में जावा विधि आमंत्रण का आंशिक कर सकता हूं?

myObject.myMethod(1) 

मैं Clojure

में यह आह्वान कर सकते हैं
(.myMethod myObject 1) 

मैं भी शाब्दिक पर्यावरण

(let [x 1] (.myMethod myObject x)) 

से जानकारी का उपयोग कर इसे आह्वान कर सकते हैं मैं एक आंशिक के साथ ऐसा कर सकते हैं? जैसे

(let [myPartial (partial .myMethod myObject)] 
     (myPartial 1)) 

यह मैं देता एक

java.lang.RuntimeException: इस संदर्भ

मैं वर्तमान में एक गुमनाम समारोह के साथ इस काम बना रही हूँ में .myMethod: प्रतीक नहीं लगाया जा सका

(let [myThing #(.myMethod myObject %)] 
     (myThing 1)) 

लेकिन अगर इस मामले में आंशिक उपयोग करना अच्छा लगेगा। क्या यह संभव है?

मुझे यकीन है कि उत्तर बाध्यकारी और प्रेषण के साथ करना होगा, लेकिन मुझे अभी तक यह महसूस नहीं हुआ है कि प्रेषण और निष्पादन के दौरान प्रेषण होता है।

उत्तर

10

आप अपने मामले में आंशिक हो सकते हैं, (memfn) का उपयोग करें।

(memfn myMethod args) 

आरईपीएल में:

user=> (doc memfn) 
------------------------- 
clojure.core/memfn 
([name & args]) 
Macro 
Expands into code that creates a fn that expects to be passed an 
object and any args and calls the named instance method on the 
object passing the args. Use when you want to treat a Java method as 
a first-class fn. name may be type-hinted with the method receiver's 
type in order to avoid reflective calls. 
+0

कि कभी नहीं सुना। धन्यवाद! – xsc

+0

धन्यवाद @ चेरॉन! – Joe

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