2012-08-25 18 views
24

स्कैला का नक्शा और सेट + ऑपरेटर को परिभाषित करता है जो डेटा संरचना की एक प्रति को संलग्न एक तत्व के साथ देता है। Seq के बराबर ऑपरेटर को :+ पर दर्शाया गया है।स्कैला में सेक में क्यों शामिल (प्रतिलिपि) को परिभाषित किया गया है: + और न केवल सेट और मानचित्र में +?

क्या इस विसंगति के लिए कोई कारण है?

उत्तर

48

मानचित्र और सेट में प्रीपेडिंग (+:) या संलग्न करने की कोई अवधारणा नहीं है (:+), क्योंकि उन्हें आदेश नहीं दिया गया है। निर्दिष्ट करने के लिए कि आप कौन सा (संलग्न या प्रीपेडिंग) उपयोग करते हैं, : जोड़ा गया था।

scala> Seq(1,2,3):+4 
res0: Seq[Int] = List(1, 2, 3, 4) 

scala> 1+:Seq(2,3,4) 
res1: Seq[Int] = List(1, 2, 3, 4) 

तर्क के आदेश से भ्रमित हो मत करो, स्केला में यदि विधि के साथ समाप्त होता है: it get's applied in reverse order (a.method नहीं (ख) लेकिन b.method (क))

+0

धन्यवाद, महान जवाब। इसके बहुत सारे अर्थ निकलते हैं। मुझे इसे अपने बारे में समझना चाहिए था :) – thesamet

19

FYI करें, स्वीकार किए जाते हैं जवाब सभी कारणों से नहीं है। यही कारण है।

% scala27 
Welcome to Scala version 2.7.7.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_06). 

scala> Set(1, 2, 3) + " is the answer" 
res0: java.lang.String = Set(1, 2, 3) is the answer 

scala> List(1, 2, 3) + " is the answer" 
warning: there were deprecation warnings; re-run with -deprecation for details 
res1: List[Any] = List(1, 2, 3, is the answer) 

कभी भी कम से कम अनुमान न करें कि किसी भी 2stringadd की तरह टेंड्रिल कितने समय तक हैं।

+5

अधिक स्पष्ट होने के लिए, यह सूची होने के कारण सूची है, लेकिन इनवेरिएंट सेट करना है, और यह किसी भी 2stringadd की तुलना में मेरे विचार में बड़ी समस्या है। –

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