2011-08-26 4 views
20
scala> val two = (1,2) 
two: (Int, Int) = (1,2) 

scala> val one = (1,) 
<console>:1: error: illegal start of simple expression 
     val one = (1,) 
        ^

scala> val zero =() 
zero: Unit =() 

यह है:क्या स्कैला में 0- और 1-टुपल्स के लिए वाक्यविन्यास है?

val one = Tuple1(5) 

वास्तव में स्केल में सिंगलटन ट्यूपल शाब्दिक लिखने का सबसे संक्षिप्त तरीका है? और Unit एक खाली टुपल की तरह काम करता है?

क्या यह असंगतता किसी और को परेशान करती है?

+0

आपको इसकी आवश्यकता कहां है? –

+1

मुझे यकीन नहीं है कि मैं ऐसी भाषा के बारे में सोच सकता हूं जिसमें '1' या' 0' tuples (किसी भी प्रयोग योग्य प्रभाव के लिए) है। मैं यह भी नहीं सोच सकता कि आप उनका उपयोग क्यों करना चाहते हैं। एक 1-टुपल वह मान है जिसे आपने इसमें रखा है। जैसे पायथन में, 'x = (5)' '5' का मूल्यांकन करता है। आप सूचियों पर काम नहीं कर सकते हैं जैसे कि आप सूचियों के साथ करेंगे - यानी 'x.head' या' x.tail' क्योंकि 5 इंट्स का टुपल 4 इट्स के साथ टुपल की तुलना में _ अलग-अलग प्रकार_ है। –

+4

पायथन में आकार के एक tuple के लिए वाक्यविन्यास 'x = (5,)' है। 'X = (5)' वास्तव में 'x = 5' के मूल्यांकन के रूप में अस्पष्टता को दूर करने के लिए अल्पविराम की आवश्यकता होती है। – Debilski

उत्तर

27

वास्तव में स्केल में सिंगलटन ट्यूपल शाब्दिक लिखने का सबसे संक्षिप्त तरीका है?

हां।

और एक खाली टपल तरह यूनिट काम करता है?

नहीं, क्योंकि यह Product लागू नहीं करता है।

इस विसंगति किसी और को परेशान करता है?

नहीं

मुझे।

5

मैं Tuple1 का एक बार उपयोग कभी नहीं देखा है। न ही मैं कल्पना कर सकता हूं।

अजगर, जहां लोगों के लिए इसका इस्तेमाल करते, tuples निश्चित-आकार रहे हैं संग्रह। स्कैला में टुपल्स संग्रह नहीं हैं, वे प्रकार के कार्टेशियन उत्पाद हैं। तो, Int x Int एक Tuple2[Int, Int] है, या (Int, Int) संक्षिप्त के लिए है। स्वाभाविक रूप से, Int एक Int है, और कोई भी प्रकार व्यर्थ नहीं है।

+0

क्या आपके पास अनुमान है कि Tuple1 क्यों मौजूद है? –

+3

@ किपटन शीयर पूर्णता, मैं दांव दूंगा। या, शायद, tuples और पैरामीटर के लंबे समय से योजनाबद्ध एकीकरण के कारण (जो, imho, शुरुआत से वहाँ होना चाहिए था)। दूसरी तरफ, टुपल्स और पैरामीटर को एकीकृत करते समय 'टुपले 0' समझ में आ जाएगा। –

+1

यह पुराना है, लेकिन आकार 0 और 1 tuples पुनरावृत्त स्थितियों में स्थिरता के लिए सही अर्थ बनाते हैं। ट्यूपल एक निश्चित आकार अनुक्रम का प्रतिनिधित्व कर सकते हैं। स्पष्ट उदाहरण जो दिमाग में आता है (दूसरी भाषा से) नम्पी का 'आकार' है, जो मैट्रिक्स के प्रत्येक आयाम में तत्वों की संख्या का वर्णन करता है। जाहिर है हम 1-आयामी matrices हो सकता है। क्या हमारे पास शून्य आयाम हो सकते हैं? कुछ हां बहस करेंगे (numpy इसे अनुमति देता है)। जो कुछ भी कहा गया, मुझे किसी भी परिस्थिति से अवगत नहीं है जहां आप इसके लिए एक सूची का उपयोग नहीं कर सकते (और स्कैला में अपरिवर्तनीय सूचियां हैं, जो इसे अच्छी तरह से प्राप्त करती हैं)। – Kat

7

ऊपर मैं कई संदर्भ देखने के लिए "क्यों Tuple1 उपयोगी है" यह वास्तव में सबसे संक्षिप्त तरीके से 1.

एक arity टिप्पणियों में के साथ एक टपल लिखने के लिए है। स्कैला में टुपल्स Product विशेषता का विस्तार करते हैं, जो आपको टुपल सदस्यों पर फिर से शुरू करने देता है।

कोई ऐसी विधि को कार्यान्वित कर सकता है जिसमें Product प्रकार का पैरामीटर हो, और इस मामले में Tuple1 टाइप आकार की जानकारी खोए बिना कई प्रकार के निश्चित आकार संग्रह को फिर से चलाने का एकमात्र सामान्य तरीका है।

Tuple1 का उपयोग करने के अन्य कारण हैं, लेकिन यह मेरे पास सबसे आम उपयोग-मामला है।

+0

समझ में आता है। लेकिन यह अच्छा होगा अगर एक ट्यूप्ले 1 बनाने के लिए एक वाक्य रचनात्मक चीनी मौजूद थी लेकिन कोई लगातार तरीका नहीं (बदसूरत '(1,) 'के बजाय) दिमाग में आता है! हो सकता है कि 'टुपल 1' और 'टुपल 0 'के लिए' टुपल ("कुछ") 'या' टुपल() 'क्रमशः' टुपल 'नामक किसी ऑब्जेक्ट में' लागू()' विधियों के द्वारा)? –

0

पिछले उत्तरों ने 1 तत्व का एक वैध टुपल दिया है। शून्य तत्वों में से एक के लिए यह कोड काम कर सकता है:

object tuple0 extends AnyRef with Product { 
    def productArity = 0 
    def productElement(n: Int) = throw new IllegalStateException("No element") 
    def canEqual(that: Any) = false 
} 
संबंधित मुद्दे