2012-04-16 12 views
6

मैं स्कैला प्रोग्रामिंग भाषा का अध्ययन शुरू कर रहा हूं। मैं Erlang और हास्केल तरह एफपी भाषाओं में से कुछ समझ है और मैं की तरह के लिए/उपज अभिव्यक्ति के अर्थ के बारे में संदेह है,:नक्शा समारोह के बराबर स्काला में 'उपज' है?

for (arg <- args) yield arg.length 

यह किसी भी इनपुट तर्क की लंबाई के साथ एक सरणी इकट्ठा होगा। मैं क्या समझ लिया है से यह सामान्य एफपी प्रोग्रामिंग में नक्शा समारोह की तरह लगता है:

map (\a -> a * 2) [1, 2, 3] (in Haskell) 

मैं जानता हूँ कि स्काला पुस्तकालय scala.collection.map विधि जिसमें, तो मैं जानना चाहूंगा: क्या कोई अंतर नहीं है या शैली का उपयोग करने में सीमा, या वे बिल्कुल वही हैं?

+1

के संभावित डुप्लिकेट (http://stackoverflow.com/questions/1052476/कर सकते हैं-समझाने-स्केलस-उपज) –

+2

समझ के लिए स्कैला हैस्केल के 'डू' नोटेशन के समान हैं। –

+1

# डैनियल, लेकिन मैं 'उपज' अर्थ नहीं मांग रहा हूं, लेकिन अन्य एफपी अभिव्यक्तियों के साथ समानता के लिए! –

उत्तर

14

for ... yield समझ map, flatMap और withFilter विधि कॉल करने के लिए संकलक द्वारा अनुवाद किया है। for बिना yield का अनुवाद foreach विधि कॉल में किया जाएगा। आप कुछ उदाहरण और अधिक जानकारी पा सकते हैं: [? किसी स्काला के उपज व्याख्या कर सकते हैं]

http://tataryn.net/2011/10/whats-in-a-scala-for-comprehension/

और यहाँ

http://adamwojtuniak.wordpress.com/2010/09/24/scala-for-comprehensions/

+4

और इसलिए, flatMap और withFilter concat के बराबर हैं और चयन करें ... उन्हें वास्तव में इस कार्यात्मक पैटर्न के लिए मानक नामकरण प्रणाली को परिभाषित करना चाहिए;) –

6

स्काला के for/yield भाव जब तक आप प्रति for अभिव्यक्ति एक प्रकार से चिपके के रूप में पूरी तरह से हास्केल में सूची/इकाई comprehensions के बराबर हैं, और वास्तव में ही समर्थ होते हैं,। (मैं Erlang के बारे में है, हालांकि पता नहीं।)

विशेष रूप से, अपने उदाहरण बिल्कुल [length arg | arg <- args] करने के लिए अनुवाद, हास्केल समारोह आवेदन f x को स्काला विधि कॉल x.f अनुवाद।

+1

क्या 'उपज' वृद्धिशील आउटपुट उत्पन्न करता है, या पूरी सूची एक बार में जाती है? –

+1

अच्छा उदाहरण Ptharien, Haskell हमेशा समय से पहले रहा है! उपज वृद्धिशील आउटपुट के बारे में, मुझे लगता है कि जब आप कोड को समानांतर करना चाहते हैं तो यह महत्वपूर्ण है, मुझे याद है कि स्कैला के समानांतर संग्रह है और 2.9 में इसके लिए .par विधि है। –

3

उप-उपज मानचित्रों पर संकलित है - यह स्कैला पुस्तक में प्रोग्रामिंग में है। स्काला में

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