2011-08-24 8 views
5

स्कैला संग्रह में :+ और +: जैसे पठनीय और लगभग पठनीय ऑपरेटरों का समूह है, लेकिन ऐसे कोई मानव पठनीय समानार्थी क्यों नहीं हैं append?स्कैला संग्रहों में कोई मानव-पठनीय विधियां क्यों नहीं हैं जैसे .append, .push, आदि

उत्तर

9

स्काला के सभी परिवर्तनशील संग्रह BufferLike trait है और यह एक संलग्न विधि को परिभाषित करता है।

अपरिवर्तनीय संग्रह BufferLike विशेषता नहीं है और इसलिए केवल अन्य तरीकों उस जगह में संग्रह में परिवर्तन नहीं करते लेकिन एक नई कुंजी जनरेट परिभाषित करते हैं।

+1

हाँ, लेकिन क्यों? मैं एक सेक के साथ रह सकता हूं जो 'एपेंड' के बाद एक नया सीईसी देता है। कम से कम आसान जावा इंटरऑपरेबिलिटी के लिए, ऐसे उपनाम क्यों न जोड़ें। – F0RR

+4

सेमेन्टिक्स, जावा में संलग्न विभिन्न स्ट्रिंगबफर और स्ट्रिंगबिल्डर जैसे विभिन्न बफर वर्गों के लिए उपयोग किया जाता है, जब आप ऐपेंड का उपयोग करते हैं तो आप वर्तमान ऑब्जेक्ट में जोड़ने की अपेक्षा करते हैं, न कि एक नई ऑब्जेक्ट बनाएं। एक ऐपेंड विधि को परिभाषित करके जो एक नई वस्तु बनाता है, आप इस उम्मीद को तोड़ते हैं, जो बिल्कुल अच्छा नहीं है। –

3

वास्तव में वे अक्सर कुछ मानव पठनीय समानार्थी शब्द:

  • foldLeft/:
  • foldRight के बराबर है :\

के बराबर है शेष लोगों को इसके अलावा ऑपरेटरों, जो काफी मानव हैं वे पठनीय हैं:

    ,210
  • ++ जावा addAll
  • :+ के बराबर है संलग्न
  • +: पहले जोड़ें है

सेमी-कोलन की स्थिति को इंगित करता रिसीवर उदाहरण है।

अंत में, कुछ अजीब ऑपरेटर अन्य कार्यात्मक प्रोग्रामिंग भाषाओं की विरासत हैं। जैसे सूची निर्माण (एसएमएल) या अभिनेता संदेश (erlang)।

+0

मुझे यकीन नहीं है कि ': +' और 'संलग्न' समान हैं। मुझे लगता है कि पूर्व ('सेक्लाइक' से) एक नया संग्रह बनाता है जबकि बाद वाला ('बफरलाइक' से) बफर को जगह में संशोधित करता है। –

+0

हां, उनके पास स्कैला में अलग-अलग अर्थ हैं, लेकिन यह अभी भी एक "संलग्न" ऑपरेशन है। – paradigmatic

4

प्रतीकात्मक विधि नाम असाइनमेंट ऑपरेशन = के साथ संयोजन की अनुमति देते हैं।

उदाहरण के लिए, यदि आप एक विधि ++ जो एक नया संग्रह बनाता है, तो आप स्वचालित रूप से ++= कुछ चर में नई संग्रहण आवंटित करने के लिए उपयोग कर सकते हैं:

var array = Array(1,2,3) 
array ++= Array(4,5,6) 
// array is now Array(1,2,3,4,5,6) 

यह प्रतीकात्मक विधि के नाम के बिना संभव नहीं है।

0

स्कैला मानक पुस्तकालय जावा अनुकूल नहीं है। इसके बजाय, जावा और स्कैला संग्रह के बीच कनवर्ट करने के लिए एडाप्टर प्रदान किए जाते हैं।

जावा फ्रेंडली एपीआई प्रदान करने का प्रयास न केवल पहचानकर्ताओं की पसंद को बाधित करेगा (या उन उपनामों को जनादेश देना चाहिए), लेकिन जेनेरिक और फ़ंक्शन प्रकारों का उपयोग करने के तरीके को भी सीमित कर देगा। डिज़ाइन को सत्यापित करने के लिए पर्याप्त रूप से अधिक परीक्षण की आवश्यकता होगी।

इसी विषय पर, मुझे कुछ बहस याद है कि 2.8 संग्रहों को java.util.Iterable लागू करना चाहिए या नहीं।

http://scala-programming-language.1934581.n4.nabble.com/How-to-set-the-scale-for-scala-BigDecimal-s-method-td1948885.html

http://www.scala-lang.org/node/2177

2

यह किसी भी अन्य भाषा की तुलना में किसी भी अलग है?

चलो जावा लेते हैं। +, -, * और / पर int पर मानव पठनीय संस्करण क्या है? या, String लें: + का मानव पठनीय संस्करण क्या है? ध्यान दें कि concat एक ही बात नहीं है - यह गैर-String पैरामीटर स्वीकार नहीं करता है।

शायद आप क्योंकि जावा में यह से परेशान हैं - विपरीत, कहते हैं, सी ++ - या तो बातें विशेष रूप से गैर अक्षरात्मक ऑपरेटरों, या वर्णमाला ऑपरेटरों का उपयोग - String के + के अपवाद के साथ।