2013-02-03 11 views
6

में स्कैला डेटा संरचनाओं तक पहुंचने ऐसा लगता है कि जावा डेटा संरचनाओं के बीच कुछ जादू अनुवाद है जब उन्हें JRuby से एक्सेस किया जाता है; वे सादे रूबी मानचित्र और सरणी जैसे काम करने लगते हैं। हालांकि, स्कैला डेटा संरचनाएं नहीं होती हैं। जेआरबी/स्कैला इंटरऑप के लिए चारों ओर घूमते समय मुझे आश्चर्यजनक रूप से थोड़ा सा पता चला। उदाहरण के लिए, आप स्कैला के Map और List प्रकारों पर फिर से कैसे चलेंगे?जेआरबीई

उत्तर

4

निश्चित रूप से आप कर सकते हैं। लेकिन यह थोड़ी-थोड़ी-थोड़ी-कूद है। सूचियों के लिए:

require "/usr/share/scala/lib/scala-library.jar" # load the scala lib 
Java::scala.collection.immutable::List.empty.send("::", 1) 
    .map(lambda{|e|e+1}, 
     Java::scala.collection.immutable.List.canBuildFrom) # by lopex 

अब आपके पास जर्बी में एक स्कैला सूची है। आप कुछ अच्छे रूबी एपीआई को आपके लिए निहितार्थ में भर सकते हैं।

+0

अद्यतन के लिए धन्यवाद। इसे आज़माकर – devth

3

द्वारा यदि "पर पुनरावृति" आप के रूप में map, reduce, filter, collect HOFs (उच्च क्रम कार्यों) इस तरह के उपयोग करने और इतने पर तो आपको कोई समस्या हो जा रहे हैं मतलब है। यह संभव है, लेकिन स्काला में प्राप्त सिंटैक्टिक लालित्य आता है क्योंकि फ़ंक्शन अक्षर लिखना इतना आसान है। क्या संकलक आप के लिए क्या कर रही है जब आप कुछ इस तरह लिखना:

scala> val l1 = List(1, 2, 3) 
l1: List[Int] = List(1, 2, 3) 

scala> l1.map(i => i * i) 
res0: List[Int] = List(1, 4, 9) 

... बना सकते हैं और Function1[Int, Int] का एक उपवर्ग जिसका apply विधि एकल Int तर्क एक लेता समारोह शाब्दिक के शरीर का मूल्यांकन करता है का दृष्टांत है ((i => i * i))।

किसी भी स्काला विधि का उपयोग करने के लिए जो आपको फ़ंक्शन स्वीकार करता है, आपको वही करना होगा। कुछ की तरह:

scala> class ISquaredF extends Function1[Int, Int] { def apply(i: Int) = i * i } 
defined class ISquaredF 

scala> (new ISquaredF)(5) 
res1: Int = 25 

scala> val isf1 = new ISquaredF 
isf1: ISquaredF = <function1> 

scala> l1.map(isf1) 
res2: List[Int] = List(1, 4, 9) 

कुल मिलाकर, यह तुलना में यह किसी भी अन्य JVM भाषा से स्काला कोड का उपयोग करने के लिए है स्काला से जावा पुस्तकालयों का उपयोग करने के लिए बेहद आसान है। यही कारण है कि स्काला और जावा क्लाइंट दोनों का समर्थन करना चाहते हैं अक्का जैसे सिस्टम विशेष जावा एपीआई हैं जो स्कैला भाषा के इन हिस्सों से बचते हैं।

+0

desugaring स्पष्टीकरण के लिए धन्यवाद। – devth

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